2011-01-25 61 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