我想有條件地覆蓋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