ERROR : Sequel :: DatabaseDisconnectError - PG :: ConnectionBad

16 views
Skip to first unread message

Gabriel Rodriguez

unread,
May 19, 2021, 7:54:55 PMMay 19
to rubysur
Hola gente,

Tengo una app sinatra con sequel que viene funcionando bien hace ya tiempo en Heroku con la siguiente configuración :
dyno: 1 - worker process: 1 - db_pool_size: 5 - max_threads: 5

Pero cuando intento aumentar el worker process: 2 o dyno : 2 obtengo un error apenas me logueo.

El error se da cuando inicio sesión con la base de datos usando sesiones sinatra
use Rack :: Session :: Pool

Error se produce en cuanto aumento worker process a 2 o dyno a 2

La misma app anda bien con:
dyno: 1 - worker process: 1 - db_pool_size: 5 - max_threads: 5

Pero da error con:
dyno: 1 - worker process: 2 - db_pool_size: 5 - max_threads: 5
dyno: 2 - worker process: 1 - db_pool_size: 5 - max_threads: 5

Si accedo a la base de datos fuera de Rack :: Session :: Pool, no tengo problemas para acceder a las tablas, pero cuando inicio sesión con cualquier usuario, inmediatamente aparece el error:

ERROR : Sequel :: DatabaseDisconnectError - PG :: ConnectionBad: PQconsumeInput () SSL error: decryption failed or bad record mac

e inmediatamente me vuelve al root impidiendo el log.

Mi sesión de rack sinatra :
class Main <Sinatra :: Aplicación
use Rack :: Session :: Pool
set: protection ,: except =>: frame_options
final

Mi conexión de sequel:
pool_size  = 5
@ db = Sequel.connect (strConexion ,: max_connections => pool_size )

También intente agregar:
@ db.extension (: connection_validator)
@ db.pool.connection_validation_timeout = -1

Mi puma.rb:
workers Integer (ENV ['WEB_CONCURRENCY'] || 1)
threads_count = Integer (ENV ['MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup DefaultRackup
port ENV ['PORT'] || 3000

Geronimo Diaz

unread,
May 20, 2021, 9:31:52 AMMay 20
to rubysur
Hola Gabriel,

Acorde al error `Sequel :: DatabaseDisconnectError - PG :: ConnectionBad: PQconsumeInput` no parece un problema de que el thread no consigue una conexion, tendrias un error similar a un `connection timeout`, la cantidad de conexiones necesarias serian `dynos * workers * threads`, que en tu caso que falla serian 10, fijate `heroku pg:info -a app-name` cuantas conexiones tenes disponibles por las dudas, pero investigaria por otro lado que significa el error.
   

Saludos !

Geronimo Diaz
Ruby/RoR Developer
--
Has recibido este mensaje porque estás suscrito al grupo "rubysur" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a rubysur+u...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/rubysur/9b0a5e90-c004-4658-91d6-739de8efb96an%40googlegroups.com.

Gabriel Rodriguez

unread,
May 21, 2021, 11:15:28 AMMay 21
to rubysur
Hola,

Gracias por responder,

Con :
dyno: 2 (2x dynos) - worker process: 1 -  max_threads: 5 - db_pool_size: 10

Logro pasar el login de usuarios e ingresar al sistema 

Pero luego en cuanto realizo cualquier operación me saca (logout) como si perdiera la sesión de usuario

Lo que veo en heroku logs -t es que entra con dyno web.1 y en la primer operación que realizo me saca porque usa dyno web.2 

Pareciera como si al usar internamente el otro dyno perdiera la sesión sinatra Rack::Session::Pool

Lo que noto es algo relacionado con el rack de sessiones sinatra y la multiplicidad de dynos o workers.

Tendré un problema de diseño ? porque con 1 solo dyno y 1 solo worker anda perfecto
Reply all
Reply to author
Forward
0 new messages