Ho un'app di rails ospitata con NGINX e Puma. Ogni 10 ore circa, l'app diventa inutilizzabile. Ogni volta che un utente tenta di connettersi, viene visualizzato il seguente messaggio di errore:Errore del pool di connessione del database di 4 rails
Error during failsafe response: could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)
Continua fino al riavvio dell'app.
Ho letto che questo è dovuto al fatto che il pool di connessione del database è pieno e quindi è necessario creare dei thread nell'app rails che non chiudono la connessione al database al termine. Per quanto ne so, c'è solo un posto nel codice dell'app dove vengono utilizzati i thread: un blocco utilizza il modulo Ruby Timeout, ma questo non accede al database.
A seguito di questa guida https://devcenter.heroku.com/articles/concurrency-and-database-connections (non sto realtà usando Heroku) ho impostato la dimensione del pool di connessione al database a 5, con il seguente file di configurazione:
#config/initializers/database_connection.rb
Rails.application.config.after_initialize do
ActiveRecord::Base.connection_pool.disconnect!
ActiveSupport.on_load(:active_record) do
config = ActiveRecord::Base.configurations[Rails.env] ||
Rails.application.config.database_configuration[Rails.env]
config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 # seconds
config['pool'] = ENV['MAX_THREADS'] || 5
ActiveRecord::Base.establish_connection(config)
end
fine
Il il sito è ospitato utilizzando Rails 4.0.0. Ho letto che questo potrebbe in realtà essere un problema di Rails 4.0.0 e che questo è stato risolto nelle versioni successive, ma non sono sicuro di ciò. ConnectionTimeoutError on Heroku with Postgres
- C'è un modo per monitorare il numero di connessioni al database attivi nel pool di connessioni? Questo renderebbe il debug molto più facile.
- Si sta utilizzando il modulo Timeout all'interno del codice dell'app Rails probabile per la causa di questo problema?
- È probabile che si tratti di un problema di Rails 4.0.0 piuttosto che di un problema con la mia app?
L'app per binari è in esecuzione nell'ambiente di produzione. Posso dare maggiori informazioni sulla mia configurazione di Puma, NGINX se necessario.
Ne vedo una tonnellata anche su un'app 4.1, che non ho mai visto su 3.x, quindi penso che il problema non sia stato risolto. – riffraff
Qualcuno trova una soluzione per questo? Sto vedendo anche questo. Ho l'impressione che sia legato alla gemma 'airbrake' e/o usando' current_user' in 'application_controller.rb'. Qualcun altro che ha questo errore usando la gemma airbrake o usando current_user in application_controller.rb? – Catfish
Commutando il mio server di sviluppo su webrick non vedo questo errore. Sto pensando che il colpevole sia il puma. – Catfish