2011-01-25 62 views
34

我們正在使用Capistrano/Webistrano(與Lee Hambley的railsless-deploy gem)將我們的PHP應用程序推送到生產服務器。我有一些自定義任務在部署過程的各個部分中運行。如何讓Capistrano在任務失敗時不會回滾

作爲一個例子,我有任務試圖停止並重新啓動jetty solr實例。但是,有時候在部署過程中這一點會失敗,因此Capistrano將回滾整個部署並恢復到之前的修訂版本。這是一個痛苦。 :-)

我想告訴Capistrano忽略這些任務的返回結果,所以如果它們失敗了,Capistrano會繼續完成部署任務。事後處理服務器很容易,並且正確地終止並重新啓動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 

回答

32
Capistrano Task docs

有你可以添加到,如果有錯誤,繼續一個配置。

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

只需將其添加到每個要忽略錯誤並繼續的任務即可。儘管如此,最好的辦法是查看是否可以找出導致故障的原因,並使重新啓動命令更加健壯以真正重新啓動它。我只是這樣說,因爲當你試圖將腳本交給其他人時,他們可能不知道如何判斷它是否正確重啓。

+0

謝謝,克里斯。我的任務永遠是一項正在進行的工作,但這將有所幫助,直到我有機會慢慢改進它們以更好地處理錯誤。 – TravellingGuy 2011-02-08 00:10:53