capistrano 3`rake db:migrate`无论如何都要运行

时间:2016-01-17 10:15:17

标签: ruby-on-rails capistrano3

我的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中的部署脚本时,它才能运行?

1 个答案:

答案 0 :(得分:1)

根据capistrano/rails gem的文档,您必须设置catch选项以检查是否需要运行迁移。

我想这是您需要的选项,您应该将其添加到:conditionally_migrate中,这样:

deploy.rb

<小时/> 要回答您的问题,在migrations.rake文件中,任务set :conditionally_migrate, true 已设置为在deploy:migrate之后运行。

此外,如果要从部署过程中完全删除此任务,并始终通过调用deploy:updated手动运行迁移,您可以这样做:

deploy:migrate
相关问题