ruby-on-rails - deploy - passenger rails
Inicio lento del servidor inicial al usar Phusion Passenger and Rails (7)
Lo que está sucediendo es que su Aplicación y / o ApplicationSpawners se están cerrando debido al tiempo de espera. Para procesar su nueva solicitud, Passenger tiene que iniciar una nueva copia de su aplicación, que puede tomar varios segundos, incluso en una máquina rápida. Para solucionar el problema, hay algunas opciones de configuración de Apache que puede usar para mantener su aplicación activa.
Esto es específicamente lo que he hecho en mis servidores. PassengerSpawnMethod y PassengerMaxPreloaderIdleTime son las opciones de configuración más importantes en su situación.
# 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
Al utilizar el modo de desove "inteligente" y desactivar PassengerMaxPreloaderIdleTime, Passenger mantendrá una copia de la aplicación en la memoria en todo momento (después de la primera solicitud después de iniciar Apache). Los oyentes individuales de la Application
se copiarán de esta copia, que es una operación súper barata. Sucede tan rápido que no puede decir si su aplicación ha generado o no un oyente.
Si su aplicación es incompatible con el desove inteligente, le recomendaría mantener un PassengerPoolIdleTime grande y acceder a su sitio periódicamente usando curl y un cronjob o monit o algo así para asegurar que el oyente se mantenga con vida.
La Guía del usuario del pasajero es una referencia impresionante para estas y otras opciones de configuración.
editar : si su aplicación es incompatible con el desove inteligente, hay algunas opciones nuevas que son muy buenas
# 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
Entonces, si combina PassengerPreStart y PassengerMinInstances, Passenger activará 3 instancias inmediatamente después de que se cargue apache, y siempre mantendrá al menos 3 instancias arriba, por lo que sus usuarios raramente (si alguna vez) verán un retraso.
O bien, si está utilizando el desove inteligente (recomendado) con PassengerMaxPreloaderIdleTime 0
ya, puede agregar PassengerPreStart
para obtener el beneficio adicional de un inicio inmediato.
¡Muchas gracias a los héroes en phusion.nl !
Para saltar en el vagón de banda de Phusion Passenger, hemos configurado un servidor de etapas para una pequeña aplicación de rieles para probar cosas.
Hasta ahora ha sido muy agradable de usar, hace que la instalación / configuración e implementación de aplicaciones sea muy sencilla. El problema es que el sitio que estamos usando no se golpea muy a menudo y parece que apaga los servidores en segundo plano. Es decir, cuando alguien va al sitio, espera mucho hasta que se inicia un nuevo servidor para gestionar la solicitud. Hemos leído la documentación, probado bastantes configuraciones diferentes (modos inteligente / inteligente-lv2, passengeridletime, etc.) y todavía no hemos encontrado una solución real.
Después de analizar los resultados de Google, realmente no podemos encontrar información útil. Actualmente tenemos un trabajo cron que realiza una solicitud de vez en cuando en un intento de mantener los servidores en ejecución.
¿Alguien más está experimentando este problema y tienes algún consejo para solucionarlo?
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
Algo para agregar y podría ser útil.
El método de generación predeterminado en la versión actual es "smart-lv2", que omite el generador de marcos, por lo que establecer el tiempo de espera del generador de marcos no tendrá ningún efecto a menos que establezca explícitamente el método de generación en "inteligente".
Fuente: http://groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli=1
Si su host es un servidor compartido, como el mío, no puede cambiar la configuración y está atascado con un trabajo cron.
Solo en caso de que haya usuarios del servidor nginx tropezando con esta pregunta, las directivas ''PassengerMaxRequests'' y ''PassengerStatThrottleRate'' no se traducen en nginx. Sin embargo, los otros sí:
rails_spawn_method smart;
rails_app_spawner_idle_time 0;
rails_framework_spawner_idle_time 0;
passenger_pool_idle_time 1000;
HTH!
EDITAR rails_spawn_method
está en desuso en el pasajero 3 en lugar de usar
passenger_spawn_method smart;
todo lo demás está bien hasta la fecha.
También puedes usar PassengerMinInstances:
http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances
Esto se puede combinar con PassengerPreStart
También tuve este problema pero no pude cambiar la configuración del pasajero porque no tenía permiso de escritura para este archivo. Encontré una herramienta ( http://www.wekkars.com ) que hace que mi aplicación responda rápidamente. Quizás esto también puede ser una solución para ti.
verifique la versión del pasajero. era RailsSpawnMethod <string>
para versiones antiguas.
Si es así (si no recuerdo mal), reemplace Passenger with Rails en todas las directivas de configuración o busque documentos antiguos de pasajeros para obtener más detalles.