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