我想有条件地覆盖deploy:migrate
,以便我们可以手动运行某些迁移。如何有条件地覆盖Capistrano的部署:迁移任务?
下面是我在config/deploy/tasks/deploy.rake
:
namespace :deploy do
if ENV['DB_MIGRATE'] == 'skip'
desc "Override Capistrano's default behavior, do not migrate on deploy"
task :migrate do
raise 'BOO!'
end
end
end
和这里就是我看到,当我运行DB_MIGRATE=skip cap staging deploy:migrate
:
INFO [deploy:migrate] Run `rake db:migrate`
DEBUG [c0ed2f81] Running /usr/bin/env if test ! -d /path/current; then echo "Directory does not exist '/path/current'" 1>&2; false; fi as [email protected]
DEBUG [c0ed2f81] Command: if test ! -d /path/current; then echo "Directory does not exist '/path/current'" 1>&2; false; fi
DEBUG [c0ed2f81] Finished in 1.061 seconds with exit status 0 (successful).
INFO [2f3a4cc7] Running bundle exec rake db:migrate as [email protected]
DEBUG [2f3a4cc7] Command: cd /path/current && (RAILS_ENV="staging" bundle exec rake db:migrate)
INFO [2f3a4cc7] Finished in 6.518 seconds with exit status 0 (successful).
(Backtrace restricted to imported tasks)
cap aborted!
BOO!
Tasks: TOP => deploy:migrate
(See full trace by running task with --trace)
从输出,它似乎像Capistrano的是做什么它总是和那么,除此之外,我要求它做什么(引发例外)。
如何完全摆脱Capistrano的默认deploy:migrate
?
我使用条件来定义任务,而任务定义只发生在本地。但是感谢链接,这让我走上了正轨! – awendt
capistrano-conditional提供了一种将“如果资产已更改”这样的条件添加到任务中的方法,所以它不是我所期望的。 – awendt