Rack: ошибки Bundler :: GemNotFound во время `установки пакета --deployment` - PullRequest
2 голосов
/ 07 февраля 2012

Итак, у меня есть несколько машин, на которых запущено приложение 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, чтобы не перезагружать всю среду при каждом пропущенном запросе?

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Я знаю, что это не дает прямого ответа на ваш вопрос, но то, что я делал в прошлом, чтобы обойти подобные вещи, - это развертывание приложения в каталогах с номерами версий с мягкой ссылкой, указывающей на них, и (Nginx) прокси-сервер перенаправляет запросы на ссылку. В конце развертывания сценарий развертывания указывает ссылку на новое приложение.

Мне показалось, что это работает достаточно хорошо, и если что-то пойдет не так, вы всегда можете вручную переназначить ссылку на предыдущую версию.

0 голосов
/ 17 февраля 2012

Ради потомства я отвечу на этот вопрос. В ходе развертывания все файлы были затронуты с помощью команды chown -R, которая обновляет ctime (но не mtime) файла. В Passenger есть также интересная ошибка / feature , где они будут перезагружать сервер при каждом изменении mtime или ctime файла /tmp/restart.txt.

Решение: прекратить засорять каталог во время развертывания.

...