我正在寻找一种方法来确保在运行结束时capistrano将启动我的tomcat,无论如何。 我在部署运行开始时停止它,但在此后不太可能出现错误的情况下,我无法再次启动它,即使错误仅仅是我找不到要部署的工件。 我可以将它添加到每个on_rollback {},但我宁愿找到一个更清洁的方式。
那么,换句话说,是否有一个相当于Java的最终关键字的capistrano?
答案 0 :(得分:1)
我假设您在询问Capistrano 2。
有命令之前和之后。
你可以这样做:
after :deploy, :restart_tomcat
还有办法做on_error =>继续
以下是我的java应用程序重启脚本的一些片段。请注意,before(或after)之前的位置是在任何名称空间声明之前。另请注意,在停止应用程序时,我忽略了错误。如果应用程序无法启动,我想要错误。
请记住,我在环境部署上调用初始化,或者开发人员可以手动调用任务来重置环境。它的工作方式无论是: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
答案 1 :(得分:1)
我知道已经有一段时间了,但是由于其他人可能碰巧发现这个问题,我会留下解决我问题的代码片段。
您可以将任务包装在Ruby (begin | rescue | ensure | end)块中。如下所示:
task(:my_task) do
begin
run "echo 'execute my deploy'; false"
rescue
run "echo 'executed on error'"
ensure
run "echo 'executed no matter what'"
end
end
您可以在执行结束时附加 true 或 false (如上面的第3行),以测试命令的失败或成功。
答案 2 :(得分:0)
我会用另一种技术再次回答,因为在上一个答案中添加评论太短了。
在我的一个项目中,我重写了回滚本身:
namespace :deploy do
namespace :rollback do
task :default do
liquibase.deploy.rollback_liquibase
revision
cleanup
end
end
end
您也可以尝试挂钩回滚:修订本身:
在“deploy:rollback:revision”,“app:do_task”
之前