capistrano 3 `rake db:migrate` 仍然运行
capistrano 3 `rake db:migrate` runs anyway
我的 rails 应用程序使用 capistrano 3.4.0 进行部署任务。
在我的 Capfile 中,我有行 require 'capistrano/rails/migrations'
以便配置可以 运行 数据库迁移的任务。
当我 cap production deploy
时,我总是可以看到以下输出:
INFO [deploy:migrate] Run `rake db:migrate`
DEBUG [6214167f] Running /usr/bin/env if test ! -d XXXX/releases/20160117093811; then echo "Directory does not exist 'XXXX/releases/20160117093811'" 1>&2; false; fi as deploy@candiru-web
DEBUG [6214167f] Command: if test ! -d XXXX/releases/20160117093811; then echo "Directory does not exist 'XXXX/releases/20160117093811'" 1>&2; false; fi
DEBUG [6214167f] Finished in 0.005 seconds with exit status 0 (successful).
INFO [1ebeb8c8] Running ~/.rvm/bin/rvm default do bundle exec rake db:migrate as deploy@candiru-web
DEBUG [1ebeb8c8] Command: cd XXXX/releases/20160117093811 && ( RAILS_ENV=production ~/.rvm/bin/rvm default do bundle exec rake db:migrate )
即使我不添加类似 after :deploy, "deploy:migrate"
的内容。
如果我注释掉 require 'capistrano/rails/migrations'
行,将不会执行迁移。
为什么?不应该 运行 仅当我将任务添加到 config/deploy.rb
中的部署脚本时?
根据 capistrano/rails gem 的文档,您必须设置 :conditionally_migrate
选项以检查是否需要 运行 迁移。
我想这就是您需要的选项,您应该将其添加到您的 deploy.rb
中,这样:
set :conditionally_migrate, true
为了回答您的问题,在 migrations.rake
文件中,任务 deploy:migrate
已在 deploy:updated
. 之后设置为 运行
此外,如果您想从部署过程中完全删除此任务,并始终通过调用 deploy:migrate
手动 运行 迁移,您可以这样做:
Rake::Task["deploy:migrate"].clear_actions
我的 rails 应用程序使用 capistrano 3.4.0 进行部署任务。
在我的 Capfile 中,我有行 require 'capistrano/rails/migrations'
以便配置可以 运行 数据库迁移的任务。
当我 cap production deploy
时,我总是可以看到以下输出:
INFO [deploy:migrate] Run `rake db:migrate`
DEBUG [6214167f] Running /usr/bin/env if test ! -d XXXX/releases/20160117093811; then echo "Directory does not exist 'XXXX/releases/20160117093811'" 1>&2; false; fi as deploy@candiru-web
DEBUG [6214167f] Command: if test ! -d XXXX/releases/20160117093811; then echo "Directory does not exist 'XXXX/releases/20160117093811'" 1>&2; false; fi
DEBUG [6214167f] Finished in 0.005 seconds with exit status 0 (successful).
INFO [1ebeb8c8] Running ~/.rvm/bin/rvm default do bundle exec rake db:migrate as deploy@candiru-web
DEBUG [1ebeb8c8] Command: cd XXXX/releases/20160117093811 && ( RAILS_ENV=production ~/.rvm/bin/rvm default do bundle exec rake db:migrate )
即使我不添加类似 after :deploy, "deploy:migrate"
的内容。
如果我注释掉 require 'capistrano/rails/migrations'
行,将不会执行迁移。
为什么?不应该 运行 仅当我将任务添加到 config/deploy.rb
中的部署脚本时?
根据 capistrano/rails gem 的文档,您必须设置 :conditionally_migrate
选项以检查是否需要 运行 迁移。
我想这就是您需要的选项,您应该将其添加到您的 deploy.rb
中,这样:
set :conditionally_migrate, true
为了回答您的问题,在
migrations.rake
文件中,任务 deploy:migrate
已在 deploy:updated
. 之后设置为 运行
此外,如果您想从部署过程中完全删除此任务,并始终通过调用 deploy:migrate
手动 运行 迁移,您可以这样做:
Rake::Task["deploy:migrate"].clear_actions