Итак, у меня есть несколько машин в производстве, на которых работает приложение Sinatra поверх стойки. Обычно все это hunky dory, пока Puppet - который мы используем для синхронизации изменений с нашими серверами, - отмечает, что Gemfile.lock для проекта изменился, и, как результат, необходимо выдать команду bundle install --binstubs --deployment
, чтобы мы получили новые драгоценные камни. Когда это произойдет, ЛЮБЫЙ запрос HTTP вызовет ошибку 500, когда он вызовет Bundler, чтобы потребовать наши драгоценные камни, потому что новые драгоценные камни еще не установлены.Rack: Bundler :: GemNotFound ошибки во время `bundle install --deployment`
Обычно у нас есть хотя бы один процесс Rack, связанный с другим процессом, который периодически делает HTTP-запрос, чтобы обеспечить работоспособность сервера, но когда это произойдет, процессов в стойке нет. Кажется, что директива PassengerMinInstances
может помочь, если проблема связана с новыми экземплярами, но у нас также есть процесс, который периодически извлекает страницу для проверки того, что сервер все еще работает, поэтому все еще должен быть хотя бы один процесс Rack для обработки запрос.
Я должен, вероятно, отметить, что куколка на самом деле не перезапускает стойку (на touch
файла restart.txt) до тех пор, пока не завершится bundle install
, поэтому не имеет никакого смысла, почему наши процессы в стойке исчезнут при этом время. Кто-нибудь сталкивался с чем-то подобным? Есть ли опция Rack, чтобы не перезагружать всю среду при каждом запросе, который я забыл?
Интересно. Это не плохое решение, если вы не возражаете делать полную проверку вашего приложения (и предположительно зависимых драгоценных камней). Это большая пропускная способность, хотя, если вы регулярно развертываете ... – tjarratt