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機器準備就緒之前,可以在其他部署之前啓動。
我需要一些東西,等待端口在所有匹配指定角色的服務器上打開後再繼續。