Estoy usando rufus-scheduler para ejecutar una serie de trabajos frecuentes que realizan varias tareas con objetos ActiveRecord. Si hay algún tipo de error de red o postgresql, incluso después de la recuperación, todos los hilos arrojarán el siguiente error hasta que se reinicie el proceso:Problema de grupo de conexión con objetos ActiveRecord en rufus-scheduler
ActiveRecord :: ConnectionTimeoutError (no se pudo obtener una conexión de base de datos en 5 segundos (esperado 5.000122687) segundos). El tamaño máximo de la agrupación actualmente es de 5; considere aumentarlo.
El error se puede reproducir fácilmente reiniciando postgres. He intentado jugar (hasta 15) con el tamaño de la agrupación, pero no tuve suerte.
Eso me lleva a creer que las conexiones están en un estado obsoleto, lo que pensé que se solucionaría con la llamada al clear_stale_cached_connections!
.
¿Existe un patrón más confiable para hacer esto?
El bloque que se pasa es una simple llamada de registro de selección y actualización, y pasa a ser importante para el objeto AR.
El trabajo rufus:
scheduler.every '5s' do
db do
DataFeed.update #standard AR select/update
end
end
envoltorio:
def db(&block)
begin
ActiveRecord::Base.connection_pool.clear_stale_cached_connections!
#ActiveRecord::Base.establish_connection # this didn't help either way
yield block
rescue Exception => e
raise e
ensure
ActiveRecord::Base.connection.close if ActiveRecord::Base.connection
ActiveRecord::Base.clear_active_connections!
end
end
alguna actualización sobre él? – jbmyid
También estoy enfrentando el mismo problema, intenté arriba e incluso 'ActiveRecord :: Base.connection_pool.with_connection' pero no funciona – jbmyid