2011-01-25 9 views
34

私たちはPHPアプリケーションをプロダクションサーバにプッシュするためにCapistrano/Webistrano(Lee Hambleyのrailsless-deploy gemを使用しています)を使用しています。私は、デプロイメントプロセスのさまざまな部分で実行されるいくつかのカスタムタスクを持っています。タスクが失敗した場合にCapistranoをロールバックさせない方法

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

私はCapistranoにこれらのタスクの復帰結果を無視するように指示したいので、失敗した場合、Capistranoは引き続き実行し、展開を終了します。事実の後にサーバにsshして、完全なデプロイメントをやり直さなくても、solrインスタンスを適切に終了して再起動するのはとても簡単です。 Capistrano Task docsから

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 

答えて

32

続行し、エラーが発生した場合に追加できる設定があります:

はここにいくつかの関連するデプロイスクリプトの一部です。

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

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

+0

ありがとう、クリス。私のタスクは永遠に進行中の作業ですが、エラー処理を改善するためにそれらを徐々に改善する機会が得られるまではこれが役に立ちます。 – TravellingGuy

+7

これを行う別の方法はありますか?エラーを止めて状態を検査したい場合はどうすればよいですか? –

+31

状態を検査する方法: 'cap -d deploy'を実行してください。 -dは "debug"を意味します。これは、Capistranoが各タスクを実行する前に一時停止し、続行または中止を要求することを意味します。デバッグが必要なコマンドが表示されたら、単にプロンプ​​トに答えないで、新しいターミナルタブ/ウィンドウとSSHをデプロイメントサーバーに開き、デバッグを実行します。 – Bendihossan

関連する問題