Solución de Problemas de Passenger

 

Generalidades

Si tu aplicación Ruby no se inicia debido a la falta de una gema, entonces debes instalarlo localmente usando Bundler. Para obtener más información sobre el uso de Bundler, visita la siguiente página:

Este artículo describe errores comunes que puedes encontrar al usar Passenger.

La aplicación de Node.js no está funcionando

El uso de Passenger con Node.js te permite cargar tu sitio en el puerto 80 o 443. Sin embargo, esto solo funciona si tu aplicación tiene un nombre app.js.

La Aplicación no se reinicia

Por lo general, esto no es un problema. Solo se percibe como un problema. En Passenger 2.1, el comportamiento del mecanismo de reinicio cambió. Ahora Passenger simplemente verifica la marca de tiempo de la modificación en el archivo restart.txt. Si es más reciente que la última vez que lo comprobaste, se reinicia. El archivo no se elimina. Esto se hizo para que el reinicio de las aplicaciones funcionara sin problemas en los recursos compartidos de NFS.

En sitios de menor tráfico, por lo general, aún puedes ver visualmente que la aplicación se reinicia "preparando" una página (cargándola un par de veces en tu navegador), tocando el archivo restart.txt y luego cargando esa página nuevamente. Debería tardar un tiempo notablemente más largo en cargarse que el par de veces anteriores. Sin embargo, esto realmente no funcionará en sitios en vivo que están recibiendo tráfico, ya que es muy posible que la solicitud de otra persona reinicie la aplicación en el momento en que la pruebes tu mismo.

Error Broken pipe

Passenger error broken pipe.jpg

Si recibes un mensaje de error que menciona un broken pipe con la clase de excepción PhusionPassenger::Railz::ApplicationSpawner::Error como se muestra en la imagen, lo más probable es que tengas problemas de límite de memoria. Lo que está sucediendo es que la solicitud que está procesando Passenger provocó que se excediera el límite de memoria de usuario en el servidor y el proceso de Rails que estaba manejando esa solicitud fue cancelado. Desafortunadamente, no hay mucho que se pueda hacer al respecto, ya que incluso una aplicación Rails muy básica requiere mucha memoria por adelantado. Esto sucede con más frecuencia si tienes más de una aplicación Rails alojada en la misma cuenta. La mejor manera de asegurarte de no encontrarte con este problema es mover tus sitios de Rails a un VPS. Eso te brinda una memoria escalable garantizada que puedes ajustar hasta que se satisfagan tus necesidades de memoria.

El registro de producción no se está escribiendo

Esto suele deberse a un archivo database.yml mal configurado. Si tu archivo database.yml no está configurado correctamente, Passenger muere antes de que se cargue tu aplicación. Como tal, no recibe mensajes de error útiles de Passenger y tu archivo production.log no se toca.

Configuraciones de conexión faltantes

A algunas versiones de Passenger realmente no les gusta si tu archivo database.yml no incluye al menos configuraciones (pueden estar en blanco) para todos los entornos. El síntoma de que esto sucede es que tu aplicación se carga sin cesar sin salida al archivo production.log. Por lo tanto, asegúrate de dejar la información de conexión para todos los entornos en tu archivo database.yml -- incluso si solo estás utilizando la configuración de producción.

Usar una conexión socket en lugar de un host

Este error simplemente no cambiar de usar una conexión de socket a un host. La información de conexión de MySQL predeterminada se ve así:

production:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: bar_production
  pool: 5
  username: root
  password: 
  socket: /tmp/mysql.sock

Como puedes ver, está configurado para usar una conexión de socket de forma predeterminada. Debes asegurarte de reemplazar esa línea con la información correcta de host, nombre de usuario y contraseña para una base de datos. Puedes encontrar esta información en la página Bases de Datos MySQL. Una configuración correcta podría verse así:

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: bar_production
  pool: 5
  username: exampleuser
  password: jWr873dnaiu12
  host: mysql.example.com

Nombres erróneos de parámetros

Otro error común es simplemente tener un parámetro necesario mal nombrado. Esto puede suceder más fácil de lo que parece porque cuando generas una aplicación Rails, esta genera de forma predeterminada un archivo de configuración sqlite3 database.yml. Debes especificar manualmente que deseas un archivo MySQL (rails --database mysql <nombre de proyecto>) o tendrás que cambiarlo manualmente. Dado que mucha gente no se da cuenta de esto, terminan cambiándolo después del hecho y los archivos de configuración sqlite3 no tienen nombre de usuario o parámetros de host. Así es como se ve una sección sqlite3 predeterminada:

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

Entonces, sería bastante fácil modificarlo para que se vea así:

production:
  adapter: mysql2
  database: bar_production
  pool: 5
  user: exampleuser
  password: jWr873dnaiu12
  host: mysql.example.com

¿Ves el problema? En esa configuración, el parámetro "Username" se llamaba "user". Este es un error muy común y fácil de pasar por alto. En realidad, debería verse así:

production:
  adapter: mysql2
  database: bar_production
  pool: 5
  username: exampleuser
  password: jWr873dnaiu12
  host: mysql.example.com

Passenger no puede encontrar rails

Ha habido algunos casos en los que aparece este error al implementar aplicaciones que incluyen tu propio config.ru, como Fat Free CRM. Si encuentras este error, intenta cambiar el nombre de config.ru y ve si el error desaparece.

Los comentarios ERB hacen que el inicio de tu vista desaparezca

Es posible que tengas la tentación de comenzar una vista con un comentario que te ayude a recordar qué archivo estás editando. Esto puede ser útil si, por ejemplo, tienes "index.html.erb" bajo muchos controladores diferentes. Puedes tener la tentación de hacer esto.

Esta vista está rota:

<% # Help controller index: %>
 <p> blah blah blah...
 <%= link_to "help topic 1", help_topic_one %>
 more blah blah blah</p>

Lo que sucede es que el procesador erb trata sumariamente como un comentario todo hasta la siguiente directiva erb. No aparecerá en el flujo de salida enviado al navegador. En el ejemplo anterior, la vista comienza con el enlace, eliminando todo lo anterior:

<a href="/">help topic 1</a> more blah blah blah</p>

Como puedes ver por la etiqueta colgante </p>, esto puede romper fácilmente tu estructura DOM, causando numerosos problemas tanto para tus directivas CSS como para cualquier comando Prototype/jQuery/Ajax que estés corriendo.

Este error puede sorprenderte porque la vista anterior se muestra exactamente como debería en Mongrel en un entorno de desarrollo.

La solución es eliminar el comentario o reemplazarlo con un comentario HTML de la vieja escuela (del tipo <!-- ).

Habilitar las páginas amigables de errores

Las páginas amigables de errores de Passenger te ayudan a solucionar problemas de actualización. Para habilitarlas, agrega lo siguiente a un archivo .htaccess dentro de la aplicación:

PassengerFriendlyErrorPages on

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?