Skip to content

Instantly share code, notes, and snippets.

@alassek
Created June 2, 2017 00:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alassek/155a7ce3bd43d7a1b090e32523361af9 to your computer and use it in GitHub Desktop.
Save alassek/155a7ce3bd43d7a1b090e32523361af9 to your computer and use it in GitHub Desktop.
Rails db:refresh task
namespace :db do
desc "Do a clean reset of your DB from a backup file"
task refresh: [:environment, :check_protected_environments] do
filename = ARGV.last
jobs = ENV.fetch('JOBS', 2)
database = ActiveRecord::Base.connection.current_database
abort "Usage: rails db:refresh filename" if filename == 'db:refresh'
abort "Can't find: #{filename}" unless File.exists? filename
abort "Can't find pg_restore, make sure it is in your $PATH" unless system "which", "pg_restore"
Rake::Task['db:drop'].invoke
Rake::Task['db:create'].invoke
system "pg_restore --verbose --clean --no-owner --dbname=#{database} --jobs=#{jobs} #{filename}"
# This re-populates ar_internal_metadata with the correct environment so that db:seed_fu doesn't fail
# see db:environment:set task: https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake
ActiveRecord::InternalMetadata.create_table
ActiveRecord::InternalMetadata[:environment] = ActiveRecord::Migrator.current_environment
if ENV.fetch('MIGRATE', 'true') == 'true'
Rake::Task['db:migrate'].invoke
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment