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

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

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

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

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

ruby-on-rails,deployment,passenger,phusion,

84

Ответов: 7


114 ов принято

Что происходит, так это то, что ваш # значительно ускоряет время всплытия - если ваше приложение совместимо. # RMagick кажется несовместимым с умным нерестом # Старые версии Пассажира, называемые этим RailsSpawnMethod PassengerSpawnMethod smart # Держите экземпляры приложений живыми дольше. Значение по умолчанию - 300 (секунд). PassengerPoolIdleTime 1000 # Держите спасателей в живых, что ускоряет создание нового прослушивателя приложений # после периода бездействия за счет памяти. # Старые версии Passenger называются RailsAppSpawnerIdleTime PassengerMaxPreloaderIdleTime 0 # На всякий случай, когда вы пропускаете память, перезапустите прослушиватель # после обработки 5000 запросов PassengerMaxRequests 5000 и / или ApplicationSpawners выходят из строя из-за тайм-аута. Чтобы обработать ваш новый запрос, Пассажир должен запустить новую копию вашего приложения, которая может занять несколько секунд даже на быстрой машине. Чтобы устранить проблему, есть несколько параметров конфигурации Apache, которые вы можете использовать для сохранения своего приложения.

Вот конкретно, что я сделал на своих серверах. Параметры PassengerSpawnMethod и PassengerMaxPreloaderIdleTime являются наиболее важными параметрами конфигурации в вашей ситуации.

Application

Используя «умный» режим нереста и выключение PassengerMaxPreloaderIdleTime, Passenger будет хранить 1 копию вашего приложения в памяти все время (после первого запроса после запуска Apache). Из этой копии Applicationвыйдут отдельные слушатели fork, что является супер-дешевой операцией. Это происходит так быстро, что вы не можете определить, было ли ваше приложение вынуждено появляться слушателем.

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

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

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

# 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

Таким образом, если вы комбинируете PassengerMaxPreloaderIdleTime 0 и PassengerMinInstances, Passenger будет разворачивать 3 экземпляра сразу после загрузки apache и всегда будет содержать как минимум три экземпляра, поэтому ваши пользователи редко (если когда-либо) будут видеть задержку.

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

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


38 ов

Просто поднимитесь, что все пользователи 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

Вы также можете использовать PassengerMinInstances:

http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances

Это можно комбинировать с PassengerPreStart


2

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


1

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

рубин-на-рельсы, развертывание, пассажирские, Phusion,
Похожие вопросы
Яндекс.Метрика