Запуск начального сервера при использовании Phusion Passenger и Rails

Чтобы перейти на полосу фургонов Phusion Passenger, мы установили промежуточный сервер для небольшого приложения для рельсов, чтобы проверить его.

До сих пор было очень приятно использовать, это делает установку/настройку и развертывание приложений легким. Проблема заключается в том, что сайт, который мы используем, не очень сильно ударяется и, похоже, закрывает серверы в фоновом режиме. Значение, когда кто-то идет на сайт, у них очень долгое ожидание, пока он не запустит новый сервер для обработки запроса. Мы прочитали документацию, попробовали несколько разных настроек (smart/smart-lv2 modes, travelidletime и т.д.) И до сих пор не нашли реального решения.

После вспашки результатов Google мы не можем найти полезную информацию. В настоящее время у нас есть задание cron, которое делает запрос каждый раз так часто, чтобы поддерживать работу серверов.

Кто-нибудь еще испытывает эту проблему, и есть ли у вас какие-либо советы по исправлению?

Ответ 1

Что происходит, что ваше приложение и/или 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, Passenger будет хранить 1 копию вашего приложения в памяти все время (после первого запроса после запуска Apache). Индивидуальные слушатели Application будут fork из этой копии, что является супер-дешевой операцией. Это происходит так быстро, что вы не можете сказать, было ли ваше приложение для вызова слушателя.

Если ваше приложение несовместимо с умным нерестом, я бы рекомендовал хранить большой PassengerPoolIdleTime и периодически нажимать на ваш сайт, используя завиток, cronjob или monit или что-то, что обеспечило бы, чтобы слушатель оставался в живых.

Руководство пользователя для пассажиров - это замечательная ссылка для этих и других параметров конфигурации.

изменить: Если ваше приложение несовместимо с умным нерестом, есть несколько новых параметров, которые очень приятны

# 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 будет разворачивать 3 экземпляра сразу после загрузки apache и всегда будет содержать не менее 3 экземпляров, поэтому ваши пользователи редко (если когда-либо) будут видеть задержку.

Или, если вы уже пользуетесь умным нерестом (рекомендуется) с помощью PassengerMaxPreloaderIdleTime 0, вы можете добавить PassengerPreStart, чтобы получить дополнительную выгоду от немедленного запуска.

Большое спасибо героям в phusion.nl!

Ответ 2

Просто убедитесь, что пользователи nginx-сервера наткнулись на этот вопрос, и директивы 'PassengerMaxRequests', и PassengerStatThrottleRate не переводят на nginx. Однако другие делают:

rails_spawn_method smart;
rails_app_spawner_idle_time 0;
rails_framework_spawner_idle_time 0;
passenger_pool_idle_time 1000;

НТН!

EDIT rails_spawn_method устарел в пассажире 3 вместо этого используйте

passenger_spawn_method smart; 

все остальное хорошо до сих пор.

Ответ 4

RE:

# Additionally keep a copy of the Rails framework in memory. If you're 
# using multiple apps on the same version of Rails, this will speed up
# the creation of new RailsAppSpawners. This isn't necessary if you're
# only running one or 2 applications, or if your applications use
# different versions of Rails.
RailsFrameworkSpawnerIdleTime 0

Просто что-то добавить и может быть полезно.

Метод spawn по умолчанию в текущей версии "smart-lv2", который пропускает создателя среды, поэтому настройка тайм-аут тайм-фрейма рамки не будет иметь никакого эффекта, если вы явно задал метод spawn "умный".

Источник: http://groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli=1

Ответ 5

Если ваш хост является общим сервером, как и мой, вы не можете изменять настройки и застревать с заданием cron.

Ответ 6

У меня также была эта проблема, но я не смог изменить настройки пассажира, потому что у меня не было права на запись в этот файл. Я нашел инструмент (http://www.wekkars.com), который помогает моему приложению быстро реагировать. Возможно, это также может быть для вас решением.

Ответ 7

проверить версию пассажира. это был RailsSpawnMethod <string> для старых версий.

Если это так (если я правильно помню), замените Passenger Rails во всех директивах конфигурации или посмотрите старые документы для более подробной информации