Как отказаться от отката Capistrano, если задача не выполнена

Мы используем Capistrano/Webistrano (с личным камнем Lee Hambley railsless-deploy gem), чтобы подтолкнуть наше приложение PHP к производственным серверам. У меня есть некоторые пользовательские задачи, которые запускаются во время различных частей процесса развертывания.

В качестве примера у меня есть задачи, которые пытаются остановить и перезапустить экземпляр solr solr. Однако иногда этот бит терпит неудачу во время развертывания, поэтому Capistrano откатывает все развертывание и возвращается к предыдущей ревизии. Это боль.: -)

Я хотел бы сказать, что Capistrano проигнорирует результат возврата этих задач, поэтому, если они потерпят неудачу, Capistrano продолжает на этом пути и заканчивает развертывание в любом случае. Мне очень легко ssh на сервер после факта и правильно убить и перезапустить экземпляр solr, вместо того, чтобы снова выполнить полное развертывание.

Вот некоторые важные части развертывания script:

before "deploy:symlink", :solr_kill
after "deploy:symlink", :solr_start, :solr_index

task :solr_kill do
    run "cd #{current_path}/Base ; #{sudo} phing solr-kill"
end

task :solr_start do
    run "cd #{current_path}/Base ; #{sudo} phing solr-start"
    run "sleep 10"
end

task :solr_index do
    run "#{sudo} #{current_path}/Base/Bin/app.php cron run solr_index_cron"
end

Ответ 1

из Документация Capistrano Task, вы можете добавить, если есть ошибка, продолжить.

task :solr_start, :on_error => :continue do
    # your code here
end

Просто добавьте, что для каждой задачи вы хотите игнорировать ошибки и продолжить. Хотя, самое лучшее, это посмотреть, можете ли вы выяснить, что вызывает отказ, и чтобы команда перезагрузки была более надежной, чтобы действительно перезапустить ее. Я только говорю это, поскольку, когда вы пытаетесь передать script кому-то другому, они могут не знать точно, как определить, правильно ли он перезапустился.