3
我们用capistrano进行部署。我们的网站由一个rails前端和java API后端组成。如何让Capistrano在继续之前等待所有服务器上的服务启动?
我有一种情况,java API应用程序需要大约15分钟才能启动,并且rails应用程序无法在没有它的情况下运行。起初,我使用捕获命令等待试图循环Capistrano的范围内,直到应用程序启动(在本例中为8080)在端口上侦听:
desc "Start api"
task :api, :roles => :api do
run("cd #{home_api} && ./api.sh start > /dev/null 2>&1 &")
sleep 1
api_status = nil
until api_status
api_status = capture("echo `netstat -tln | grep 8080`")
sleep 60
end
puts "API Started successfully."
end
然而,capture only runs on one server(我们有几个API的机器),如果一个完成在所有API机器准备就绪之前,可以在其他部署之前启动。
我需要一些东西,等待端口在所有匹配指定角色的服务器上打开后再继续。