Skip to content

Instantly share code, notes, and snippets.

@subimage
Created February 7, 2013 22:27
Show Gist options
  • Save subimage/4734805 to your computer and use it in GitHub Desktop.
Save subimage/4734805 to your computer and use it in GitHub Desktop.
Capistrano task to import production database code locally.
namespace :db do
desc "Load production data into development database"
task :load_production_data, :roles => :db, :only => { :primary => true } do
require 'yaml'
# Gets db yml from server, because we don't store it on dev boxes!
get "#{current_path}/config/database.yml", "tmp/prod_database.yml"
prod_config = YAML::load_file('tmp/prod_database.yml')
local_config = YAML::load_file('config/database.yml')
# Dump server sql
filename = "dump.#{Time.now.strftime '%Y-%m-%d_%H:%M:%S'}.sql"
server_dump_file = "#{current_path}/tmp/#{filename}"
on_rollback { delete server_dump_file }
run "mysqldump -u #{prod_config['production']['username']} --password=#{prod_config['production']['password']} #{prod_config['production']['database']} > #{server_dump_file}" do |channel, stream, data|
puts data
end
# Compress file for quicker transfer
run "gzip #{server_dump_file}"
get "#{server_dump_file}.gz", "tmp/#{filename}.gz"
puts "Uncompressing local db dump file"
`gunzip tmp/#{filename}.gz`
puts "Loading locally..."
`mysql -u #{local_config['development']['username']} --password=#{local_config['development']['password']} #{local_config['development']['database']} < tmp/#{filename}`
puts "Cleaning up temp files"
`rm -f tmp/#{filename}`
`rm -f tmp/prod_database.yml`
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment