Generalidades sobre Passenger

Generalidades

Passenger es un servidor web y de aplicaciones de código abierto que simplifica enormemente la implementación de aplicaciones Ruby, Python y Node.js.

En DreamHost, Passenger se integra con un servicor Apache o Nginx. Sitio web de Passenger lo explica de la siguiente manera:

Nginx y Apache

Nginx y Apache son servidores web. Proporcionan manejo de transacciones HTTP y sirven archivos estáticos. Sin embargo, no son servidores de aplicaciones Ruby y no pueden ejecutar aplicaciones Ruby directamente. Es por eso que Nginx y Apache se utilizan en combinación con un servidor de aplicaciones, como Passenger.

Los servidores de aplicaciones hacen posible que las aplicaciones Ruby hablen HTTP. Las aplicaciones Ruby (y los frameworks como Rails) no pueden hacer eso por sí mismos. Por otro lado, los servidores de aplicaciones generalmente no son tan buenos como Nginx y Apache en el manejo de solicitudes HTTP. Lo difícil está en los detalles: Nginx y Apache manejan mejor la seguridad de E/S, la administración de concurrencia HTTP, los tiempos de espera de conexión, etc. Por eso, en entornos de producción, los servidores de aplicaciones se utilizan en combinación con Nginx o Apache.

Límites de memoria

Los servidores compartidos matarán el script si está usando mucha memoria.

Dado que las aplicaciones Ruby on Rails y Python pueden usar mucha memoria, los sitios que ejecutan dichas aplicaciones con Passenger solo deben ejecutarse en un servidor VPS o Dedicado.

Ruby on Rails

Passenger es la forma preferida de implementar y alojar aplicaciones Ruby on Rails en todos los servidores DreamHost y es gratuita en todos los planes de alojamiento de DreamHost.

Las siguientes son las acciones básicas que tienen lugar una vez que se solicita un archivo desde un dominio que ejecuta Passenger y Ruby on Rails:

  1. Cuando un requerimieneto es hecho en un dominio/subdominio, el Servidor HTTP de Apache pasa el requerimiento a Passenger.
  2. Passenger primero busca un HTML llamado apropiadamente o un archivo CGI en el subdirectorio /public del dominio/subdominio (example.com/public).
  3. Si no se encuentra ningún archivo coincidente, la solicitud se pasa a la interfaz de Rack de Passenger.

    Esta es la misma forma que Ruby on Railshace uso del subdirectorio /public.

  4. Rack busca el archivo llamado config.ru en el directorio root del dominio/subdominio (example.com) para generar una respuesta..

    Rack requiere que pongas el código de Ruby apropíado dentro del archivo config.ru para invocar el framework/aplicación deseada para manejar el requerimiento.

En circunstancias normales, Ruby on Rails (RoR) crea e inicia automáticamente todos los archivos y directorios necesarios para interactuar con Passenger/Rack.

Al ejecutar una aplicación RoR, los únicos archivos relacionados con Rack que probablemente modificará son los siguientes:

  • Agregando posiblemente información de GEM_PATH a config.ru
  • Correrg touch en el archivo restart.txt para reiniciar la aplicación. Por ejemplo:
    [server]$ touch tmp/restart.txt

Passenger vs. FastCGI

Passenger solo debe habilitarse si tiene la intención de ejecutar una aplicación basada en Ruby/Python/Node.js como la única aplicación para todo el dominio/subdominio.

Passenger dirige todas las solicitudes para el dominio/subdominio designado a la aplicación compatible con Rack asociada, por lo que es mejor dejar a Passenger deshabilitado si no lo necesitas.

Cuando habilitar Passenger

Solo debes habilitar Passenger si deseas acceder a tu aplicación a través de las siguientes tres URL:

  • myapp.example.com
  • www.example.com
  • www.myapp.example.com

Si quieres acceder a tu aplicación en un subdirectorio (www.example.com/path-to-myapp), entocnes usa FastCGI en vez de Passenger.

Notas técnicas

Registro de errores

La salida a STDERR para los procesos que se ejecutan a través de la interfaz de Rack se dirige automáticamente al archivo de registro de errores maestro del servidor en lugar del archivo de registro específico del dominio/subdominio.

Solicionar problemas del registro de errores

Los clientes de DreamHost no tienen acceso al archivo de registro de errores maestro.

Esta limitación puede dificultar la depuración de errores de iniciación (en particular, errores de sintaxis y problemas de resolución de gemas). Passenger a menudo producirá una página web de salida de error que incluye un seguimiento de pila, pero a veces no es así.

Contactar al soporte de DreamHost si Passenger no produce una salida de error útil. El equipo de soporte examinará el archivo de registro maestro por ti.

Una vez que un framework (como RoR) está en funcionamiento, su salida de error generalmente es manejada por el propio mecanismo de registro de errores del marco. Por ejemplo, RoR registra su salida de error en un archivo llamado log/production.log.

Versión de Ruby

Los servidores de DreamHost corren una versión predeterminada de Ruby. También puedes instalar RVM para usar una versión de Ruby diferente.

phpMyAdmin

Activar Passenger en un dominio (example.com) rompe la interfaz phpMyAdmin de cualquir subdominio (blog.example.com) dentro del dominio.

Para usar phpMyAdmin y Passenger, debes agregar un dominio que no esté corriendo Passenger en tu panel. Puedes agregar un subdominio dreamhosters.com gratuitamente y usar tus credenciales de inicio de sesión para este propósito.

ModRewrite

Passenger deshabilita algunas funcionalidades mod_rewrite. Esto quiere decir que va a sobreescribir automáticamente una configuración dispatch.fcgi que tengas en su lugar. Esto no es un problema para tu aplicación Rails, pero puede tener otros efectos secundarios (como romper otras reglas mod_rewrite que hayas configurado). Si esto causa un problema para tu sitio web, intenta utilizar el método FastCGI en su lugar.

Gemas

Puedes usar tu gema de repositorio local si estás usando lo siguiente en el archivo config/environment.rb. Asegúrate de cambiar username a tu usuario Shellr y la versión de Ruby a la que tu sitio está usando.

if ENV['RAILS_ENV'] == 'production'  # don't bother on dev
  ENV['GEM_PATH'] = '/home/username/.gems' #+ ':/usr/lib/ruby/gems/2.5.0'  # Need this or Passenger fails to start
end

require File.join(File.dirname(__FILE__), 'boot')

El mismo camino debe ser configurado en las variables del ambiente de shell GEM_HOME y GEM_PATH para que puedas usar el programa de gemas para instalar/actualizar tus propias gemas. Puedes volver a cargar el archivo de configuración corriendo touch tmp/restart.txt en tu directorio base.

Solución de problemas

Para solución de problemas comunes, por favor visita el artículo Solución de problemas de Passenger.

Ver también

 

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?