web-dev-qa-db-ja.com

タスクが失敗した場合にCapistranoをロールバックしないようにする方法

Capistrano/Webistrano(LeeHambleyのrailsless-deploygemを使用)を使用して、PHPアプリケーションを本番サーバーにプッシュします。デプロイプロセスのさまざまな部分で実行されるカスタムタスクがいくつかあります。

例として、jettysolrインスタンスを停止して再起動しようとするタスクがあります。ただし、デプロイ中にこのビットが失敗することがあるため、Capistranoはデプロイ全体をロールバックし、前のリビジョンに戻します。これは苦痛です。 :-)

これらのタスクの戻り結果を無視するようにCapistranoに指示したいので、タスクが失敗した場合でも、Capistranoは途中で続行し、とにかくデプロイを終了します。完全なデプロイを再度実行する必要はなく、事後にサーバーにSSHで接続し、solrインスタンスを適切に強制終了して再起動するのは非常に簡単です。

デプロイスクリプトの関連部分は次のとおりです。

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
34
TravellingGuy

Capistrano Task docs から、エラーが発生した場合に追加して続行できる構成があります。

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

エラーを無視して続行する各タスクにそれを追加するだけです。ただし、最善の方法は、障害の原因を特定し、restartコマンドをより堅牢にして実際に再起動できるかどうかを確認することです。スクリプトを他の人に渡そうとすると、正しく再起動したかどうかを正確に判断できない可能性があるため、これだけを言います。

33