2010-02-11 3 views
2

Я запускаю приложение, которое запускает процесс Rufus Scheduler в инициализаторе. Приложение работает с Пассажиром в производстве, и я заметил пару странных поведений:Rails продолжает перезагружаться в производстве Passenger

Во-первых, чтобы перезапустить сервер и убедиться, что инициализатор запущен, вам необходимо как touch tmp/restart.txt, так и загрузить приложение в браузере , В этот момент запускается инициализатор. Ужасно то, что если вы делаете только прикосновение, процессы, запланированные Rufus, будут сброшены и не будут перенесены до тех пор, пока вы не загрузите приложение в браузере.

Только это я могу иметь. Но это приводит к второй проблеме: я заметил, что запланированный процесс не запущен, поэтому я загружаю страницу, и вдруг файл журнала сообщает мне, что он запускает инициализаторы, как если бы я перезагрузился. Итак, в какой-то момент Пассажир случайно перезагружается, как если бы я коснулся tmp/restart.txt и уничтожил запланированные процессы.

У меня невероятно плохое понимание интеграции Passenger and Rails, поэтому я не знаю, является ли эта случайная перезагрузка аберрантной или всей частью архитектуры. Может ли кто-нибудь предложить какую-либо мудрость в этой ситуации?

ответ

2

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

Вам следует ознакомиться с документацией Пассажира, в частности, Resource Control and Optimization section. Существуют настройки, которые могут препятствовать закрытию приложения Пассажиром, если это то, что вы хотите.

Используя параметр PassengerPoolIdleTime, вы можете сохранить хотя бы один процесс, но вы почти наверняка захотите, чтобы Passenger запускал другие экземпляры приложения по мере необходимости. This thread в Планировщике Rufus. Группа Google упоминает использование файлов блокировки, чтобы предотвратить запуск нескольких планировщиков, которые могут быть полезны для вас.

+0

На самом деле вы можете использовать PassengerMinInstances (Apache) или пассажирские_инсталляции (nginx), чтобы поддерживать один процесс во все времена. Я думаю, что это более новые версии Passenger, которые, возможно, не были выпущены, когда ответ Джеффа был впервые опубликован. Вам все еще нужен файл блокировки Rufus Scheduler, потому что вы не знаете, какие экземпляры Пассажира будут прекращены, только чтобы всегда было не менее 1. – alvin

Смежные вопросы