Что происходит, что ваше приложение и/или ApplicationSpawners закрываются из-за тайм-аута. Чтобы обработать ваш новый запрос, Пассажир должен запустить новую копию вашего приложения, которая может занять несколько секунд даже на быстрой машине. Чтобы устранить проблему, есть несколько параметров конфигурации Apache, которые вы можете использовать для сохранения своего приложения.
Вот что я сделал на своих серверах. Параметры PassengerSpawnMethod и PassengerMaxPreloaderIdleTime являются наиболее важными параметрами конфигурации в вашей ситуации.
# Speeds up spawn time tremendously -- if your app is compatible.
# RMagick seems to be incompatible with smart spawning
# Older versions of Passenger called this RailsSpawnMethod
PassengerSpawnMethod smart
# Keep the application instances alive longer. Default is 300 (seconds)
PassengerPoolIdleTime 1000
# Keep the spawners alive, which speeds up spawning a new Application
# listener after a period of inactivity at the expense of memory.
# Older versions of Passenger called this RailsAppSpawnerIdleTime
PassengerMaxPreloaderIdleTime 0
# Just in case you're leaking memory, restart a listener
# after processing 5000 requests
PassengerMaxRequests 5000
С помощью «умного» режима нереста и выключая PassengerMaxPreloaderIdleTime, Пассажир будет держать 1 копию приложения в памяти в любое время (после первого запроса после запуска Apache). Индивидуальный Application
слушателей будет fork
из этой копии, которая является супер-дешевой операцией. Это происходит так быстро, что вы не можете определить, было ли ваше приложение вынуждено появляться слушателем.
Если ваше приложение несовместимо с умным нерестом, я бы рекомендовал хранить большое значение PassengerPoolIdleTime и периодически нажимать на ваш сайт, используя завиток, cronjob или monit или что-то в этом роде, чтобы слушатель оставался жив.
Passenger User Guide является прекрасной ссылкой для этих и других вариантов конфигурации.
редактировать: Если ваше приложение несовместимо с умным нерестом, есть некоторые новых вариант, которые очень хорошо
# Automatically hit your site when apache starts, so that you don't have to wait
# for the first request for passenger to "spin up" your application. This even
# helps when you have smart spawning enabled.
PassengerPreStart http://myexample.com/
PassengerPreStart http://myexample2.com:3500/
# the minimum number of application instances that must be kept around whenever
# the application is first accessed or after passenger cleans up idle instances
# With this option, 3 application instances will ALWAYS be available after the
# first request, even after passenger cleans up idle ones
PassengerMinInstances 3
Так что, если вы объедините PassengerPreStart и PassengerMinInstances, Passenger будет вращаться- экземпляры сразу после загрузки apache и всегда будут содержать не менее 3 экземпляров, поэтому ваши пользователи редко (если когда-либо) будут видеть задержку.
Или, если вы используете умный нерест (рекомендуется) с PassengerMaxPreloaderIdleTime 0
, вы можете добавить PassengerPreStart
, чтобы получить дополнительную выгоду от немедленного запуска.
Большое спасибо героям на phusion.nl!
Я также нашел этот самородок на сайте пассажирского дока: http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerPreStart – dewrich
@dewrich Я нашел инструмент (http://wekkars.com), который делает именно то, что делает ваш cronjob – SteenhouwerD