【发布时间】:2011-11-02 22:29:53
【问题描述】:
我们使用 capistrano 进行部署。我们的网站由 Rails 前端和 java API 后端组成。
我有一种情况,Java API 应用程序需要大约 15 分钟才能启动,而没有它,rails 应用程序就无法运行。最初我尝试使用 capture 命令在 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 机器准备好之前继续。
我需要一些东西来等待所有与指定角色匹配的服务器上的端口打开,然后再继续。
【问题讨论】:
标签: deployment capistrano