# load production data, still needs some polish # based on code from http://push.cx/2007/capistrano-task-to-load-production-data # cap 2.0 compatible # exec is being weird, had to end w/ a syscall :\ any ideas? desc "Load production data into development database" task :load_production_data, :roles => :db, :only => { :primary => true } do require 'yaml' ['config/database.yml'].each do |file| database = YAML::load_file(file) filename = "dump.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.sql.gz" # on_rollback { delete "/tmp/#{filename}" } # run "mysqldump -u #{database['production']['username']} --password=#{database['production']['password']} #{database['production']['database']} > /tmp/#{filename}" do |channel, stream, data| run "mysqldump -h #{database['production']['host']} -u #{database['production']['username']} --password=#{database['production']['password']} #{database['production']['database']} | gzip > /tmp/#{filename}" do |channel, stream, data| puts data end get "/tmp/#{filename}", filename # exec "/tmp/#{filename}" password = database['development']['password'].nil? ? '' : "--password=#{database['development']['password']}" # FIXME pass shows up in process list, do not use in shared hosting!!! Use a .my.cnf instead # FIXME exec and run w/ localhost as host not working :\ # exec "mysql -u #{database['development']['username']} #{password} #{database['development']['database']} < #{filename}; rm -f #{filename}" `gunzip -c #{filename} | mysql -u #{database['development']['username']} #{password} #{database['development']['database']} && rm -f gunzip #{filename}` end end