我正在寻找一种方法来确保 capistrano 无论如何都会在运行结束时启动我的 tomcat。 我在部署运行开始时停止它,但在不太可能出现错误的情况下,我无法再次启动它,即使错误只是找不到我想要部署的工件。 我可以将启动它添加到每个 on_rollback{} 中,但我宁愿找到一种更简洁的方法。
那么,换句话说,有没有一个相当于Java的finally关键字的capistrano呢?
最佳答案
我假设您问的是 Capistrano 2。
有之前和之后的命令。
你可以这样做:
after :deploy, :restart_tomcat
还有一些方法可以执行 on_error => continue
以下是我的 Java 应用程序重新启动脚本中的一些片段。请注意,before(或after)的位置位于任何 namespace 声明之前。另请注意,在停止应用程序时,我忽略了错误。如果应用程序无法启动,我希望出现错误。
请记住,我在环境部署上调用初始化,或者开发人员可以手动调用该任务来重置环境。无论是在 :deploy 中调用还是作为 app.deploy.initialize_app 调用,它都有效。
before "app:deploy:initialize_app", "app:deploy:stop_app"
namespace :app do
namespace :deploy do
task :initialize_app, :roles => :app do
#Do Stuff.
end
task :stop_app, :roles => :app, :on_error => :continue do
run "cd '#{deploy_to}/current/app/bin'; #{java_home_cmd}; ./tcserver.sh #{stage_name} stop"
end
task :restart_app, :roles => :app do
app.deploy.stop_app
print "Sleeping 60 seconds.\n"
sleep 60
run "cd '#{deploy_to}/current/app/bin'; #{java_home_cmd}; ./tcserver.sh #{stage_name} start"
end
end
end
关于deployment - 无论错误如何,都使用 capistrano 执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18142968/