Skip to content

Instantly share code, notes, and snippets.

@wulftone
Created November 2, 2011 01:21
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wulftone/1332577 to your computer and use it in GitHub Desktop.
Save wulftone/1332577 to your computer and use it in GitHub Desktop.
Rake task for Rails: Completely reload test and dev databases
namespace :db do
desc 'Drop, create, migrate, and seed a database'
task :reload => :environment do
puts "Environment Check: Rails Environment = #{Rails.env}"
Rake::Task['db:drop'].reenable
Rake::Task['db:drop'].invoke
Rake::Task['db:create'].reenable
Rake::Task['db:create'].invoke
Rake::Task['db:migrate'].reenable if Rails.env.development?
Rake::Task['db:migrate'].invoke if Rails.env.development?
Rake::Task['db:test:prepare'].reenable if Rails.env.test?
Rake::Task['db:test:prepare'].invoke if Rails.env.test?
Rake::Task['db:seed'].reenable
Rake::Task['db:seed'].invoke
end
desc 'Drop, create, migrate, and seed development and test databases'
namespace :reload do
task :all do
['development','test'].each do |env|
Rails.env = env
puts "=== Starting #{Rails.env} reload ===\n\n"
Rake::Task['db:reload'].reenable
Rake::Task['db:reload'].invoke
puts "=== Finishing #{Rails.env} reload ===\n\n"
end
end
end
end
@wrburgess
Copy link

Here's another way to do this with a little data safety in mind:

task :build => :environment do
input = ''
STDOUT.puts "Drop and recreate database? y[es] or n[o]"
input = STDIN.gets.chomp
if input == "y"
puts "Executing tasks..."
Rake::Task["db:drop"].execute
Rake::Task["db:create"].execute
Rake::Task["db:migrate"].execute
Rake::Task["db:test:prepare"].execute
Rake::Task['db:seed'].execute
else
puts "Aborting tasks..."
end
end

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