1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
namespace :deploy do
desc 'Runs rake data:migrate if migrations are set'
Rake::Task['deploy:migrate'].clear_actions
task :migrate => [:set_rails_env] do
on fetch(:migration_servers) do
conditionally_migrate = fetch(:conditionally_migrate)
info '[deploy:migrate] Checking changes in db/migrate or db/data' if conditionally_migrate
if conditionally_migrate &&
test("diff -q #{release_path}/db/migrate #{current_path}/db/migrate") &&
test("diff -q #{release_path}/db/data #{current_path}/db/data")
info '[deploy:migrate] Skip `deploy:migrate` (nothing changed in db/migrate or db/data)'
else
info '[deploy:migrate] Run `rake db:migrate:with_data`'
invoke :'deploy:migrating_with_data'
end
end
end
desc 'Runs rake db:migrate:with_data'
task migrating_with_data: [:set_rails_env] do
on fetch(:migration_servers) do
within release_path do
with rails_env: fetch(:rails_env) do
execute :rake, 'db:migrate:with_data'
end
end
end
end
after 'deploy:updated', 'deploy:migrate'
end
namespace :load do
task :defaults do
set :conditionally_migrate, fetch(:conditionally_migrate, false)
set :migration_role, fetch(:migration_role, :db)
set :migration_servers, -> { primary(fetch(:migration_role)) }
end
end
|