如果任务失败,如何让Capistrano不回滚

时间:2011-01-25 21:44:31

标签: capistrano

我们正在使用Capistrano / Webistrano(与Lee Hambley的无轨部署宝石)将我们的PHP应用程序推送到生产服务器。我有一些自定义任务可以在部署过程的各个部分运行。

例如,我有一些尝试停止并重新启动jetty solr实例的任务。但是,有时在部署期间这个位失败,因此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

1 个答案:

答案 0 :(得分:33)

来自Capistrano Task docs

如果有错误,可以添加一个配置,以便继续。

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

只需将其添加到要忽略错误的每个任务,然后继续。尽管如此,最好的办法是看看你是否可以弄清楚导致失败的原因,并让restart命令更加强大,以便真正重新启动它。我只说这个,因为当你试图将脚本交给其他人时,他们可能不知道如何判断它是否正确重启。

相关问题