如果任务失败,Capistrano不会回滚

我们使用Capistrano / Webistrano(Lee Hambley的railsless-deploy gem)将我们的PHP应用程序推送到生产服务器。 我有一些自定义任务在部署过程的各个部分中运行。

作为一个例子,我有任务试图停止并重新启动dockersolr实例。 但是,有时在部署过程中会失败,所以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 

从Capistrano任务文档有一个configuration,你可以添加到如果有错误,继续。

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

只需将其添加到每个要忽略错误并继续的任务即可。 尽pipe如此,最好的办法是查看是否可以找出导致故障的原因,并使重新启动命令更加健壮以重新启动。 我只是这样说,因为当你试图把脚本交给其他人时,他们可能不知道如何判断它是否正确重启。