tengo la configuración de mi aplicación Rails de la siguiente manera:rieles produce "PGError: servidor ha cerrado la conexión de forma inesperada" después de algún tiempo de espera
- Rieles: 3.0.5 (bajo proxy de Apache) que se ejecuta en RHEL 5.6
- Postgres: 8.4, ejecutándose en Windows Server 2008 Los 2 servidores están en la misma LAN.
El problema es que, después de algún tiempo de inactividad, cuando hago una nueva solicitud a la aplicación Rails, me da el siguiente error:
ActiveRecord::StatementInvalid (PGError: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Por lo que he investigado, parece que la las conexiones de la base de datos se eliminan después de un tiempo de espera por Postgres. Durante este tiempo, desde el lado de los carriles,
- si hago una petición a los carriles (primera solicitud), se mostrará el error de conexión que el anterior
- si hago otra petición a los carriles (segunda petición), Rails parece reconectarse con Postgres y funciona correctamente.
Significa que siempre experimentaré el primer error de conexión y luego tendré todo el funcionamiento normal nuevamente, lo cual es muy grave en mi caso ya que me gustaría entregar una respuesta sin errores a mi cliente.
He mirado en el seguimiento de preguntas y respuestas, pero no parecen ser apropiados para mi caso:
- "PGError: no connection to the server" after idle (Ubuntu para el servidor de base de datos)
- How to use tcp_keepalives settings in Postgresql? (mensajes de actividad en MacOS)
¿Tiene algún consejo para que mi aplicación esté libre de errores de conexión de db? Gracias.
Estoy obteniendo el mismo error mientras uso postgresql con heroku – Salil
Es normal que las conexiones desaparezcan. No es normal que Rails lo trate tan desvergonzadamente. Compruebe la implementación del controlador de su base de datos (adaptador) de 'verify!' Y 'active?'; normalmente 'ActiveRecord :: ConnectionAdapters :: ConnectionPool' da al adaptador la oportunidad de volver a conectar cualquier conexión obsoleta inmediatamente antes de verificarlo desde el grupo. ¿Qué gema estás usando para Postgres? – vladr