Мы делаем наши развертывания с Capistrano.Наш веб-сайт состоит из интерфейса rails и бэкэнда java API.
У меня есть ситуация, когда запуск приложения 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
Однако захват выполняется только на одном сервере (у нас есть несколько машин API), и если тот завершает запуск до того, как другие начнут развертывание, прежде чем все машины API будут готовы.
Мне нужно что-то, что будет ждать открытия порта на всехсерверы, соответствующие указанной роли, прежде чем двигаться дальше.