Skip to content

Instantly share code, notes, and snippets.

@Dangeranger
Last active August 29, 2015 14:15
Show Gist options
  • Save Dangeranger/6babcf899035dc98ae50 to your computer and use it in GitHub Desktop.
Save Dangeranger/6babcf899035dc98ae50 to your computer and use it in GitHub Desktop.
Simpe Rails database backup and restore Rake tasks
# lib/tasks/db.rake
namespace :db do
desc "Dumps the database to db/APP_NAME.dump"
task :dump => :environment do
cmd = nil
with_config do |app, host, db, user|
cmd = "pg_dump --host #{host} --username #{user} --verbose --clean --no-owner --no-acl --format=c #{db} > #{Rails.root}/db/#{app}.dump"
end
puts cmd
exec cmd
end
desc "Restores the database dump at db/APP_NAME.dump."
task :restore => :environment do
cmd = nil
with_config do |app, host, db, user|
cmd = "pg_restore --verbose --host #{host} --username #{user} --clean --no-owner --no-acl --dbname #{db} #{Rails.root}/db/#{app}.dump"
end
Rake::Task["db:drop"].invoke
Rake::Task["db:create"].invoke
puts cmd
exec cmd
end
private
def with_config
yield Rails.application.class.parent_name.underscore,
ActiveRecord::Base.connection_config[:host],
ActiveRecord::Base.connection_config[:database],
ActiveRecord::Base.connection_config[:username]
end
end

dump the development db

rake db:dump

dump the production db

RAILS_ENV=production rake db:dump

dump the production db & restore it to the development db

RAILS_ENV=production rake db:dump
rake db:restore

note: config/database.yml is used for database configuration,

but you will be prompted for the database user's password

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment