una tropas tecnica personas pegajoso paquete papel movimiento mortandad liquido las etc espeso ejecutadas ejecutada cuadernillos crucigrama cartas batalla asalto ruby-on-rails activerecord ruby-on-rails-3.1 database-connection connection-timeout

ruby on rails - tropas - ActiveRecord:: ConnectionTimeoutError ocurre esporádicamente



pegajoso crucigrama (4)

También se aplica a Rails 5, ya que Puma es el servidor predeterminado.

Si está utilizando Servidores con Rosca como Puma, Phushion Passenger, crean múltiples hebras de la misma aplicación. De este modo, la aplicación se ejecuta más rápido, ejecutando simultáneamente cada solicitud entrante.

Asegúrese de que el tamaño de la agrupación sea igual o mayor que el número de subprocesos. Estaba teniendo un problema cuando algunos de mis hilos me estaban dando ActiveRecord::ConnectionTimeoutError , y el problema era vago, ya que ocurre de vez en cuando, no muy a menudo.

Cada vez que tengo una aplicación que utiliza ActiveRecord, obtengo este ConnectionTimeoutError, pero siempre después de un cierto período de tiempo desconocido.

ActiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5 seconds. The max pool size is currently 30; consider increasing it.):

Anteriormente se estableció en 5, ya lo hemos aumentado y no hay forma de que se puedan usar 30 conexiones al mismo tiempo. Lo único para lo que usamos ActiveRecord es nuestra tienda de sesión.

Nuestro archivo database.yml se parece a:

development: adapter: sqlite3 database: db/development.sqlite3 pool: 30 timeout: 5000

(Los ajustes de prueba y producción son los mismos)

He estado buscando en Google este evento, y acabo de encontrar esta publicación:

https://groups.google.com/forum/#!msg/copenhagen-ruby-user-group/GEHgi_WudmM/gnCiwWqmVfMJ

¿Qué menciona que ActiveRecord no comprueba una conexión de nuevo en el grupo una vez que se hace con ella? ¿Es eso cierto? ¿Necesito gestionar manualmente las conexiones?

¡Aprecio cualquier consejo!

editar Probablemente debería mencionar que estoy ejecutando Rails 3.1.3


Rails tiene un middleware llamado ActiveRecord::ConnectionAdapters::ConnectionManagement que borra las conexiones activas en cada solicitud para que no se queden. Verifique su middleware para asegurarse de que tiene esto (que está ahí de manera predeterminada), ejecute "rake middleware". No debería tener que administrar las conexiones manualmente para responder a su última pregunta.

Ejecuta esto en tu consola

ActiveRecord::Base.clear_active_connections!


También estaba experimentando un problema similar con una aplicación Sinatra, agregué

after do ActiveRecord::Base.clear_active_connections! end

A mi controlador de aplicación y resolvió mi problema.

Esta construcción se conoce como un filtro y se evalúa después de cada solicitud.

No estoy seguro de lo que realmente estaba sucediendo con la aplicación, pero sospecharía que las conexiones no se estaban cerrando después de cada solicitud.


Utilicé este código en mi aplicación Sinatra

after do ActiveRecord::Base.clear_active_connections! end

Esto resuelve mi problema