C'è un altro motivo potenziale per questo errore, ed è il pool di connessioni ActiveRecord mietitore . Quando abilitato, il mietitore esegue la scansione del pool di connessioni per le connessioni "morte" e le chiude. Nei miei test, sembra essere troppo zelante e chiude anche connessioni perfettamente attive (in genere quelle che eseguono query leggermente più grandi).
Prova a cancellare reaping_frequency
dalla configurazione del tuo DB (che lo disattiva) e vedi se questo aiuta. Scansiona la tua base di codice per quella stringa e assicurati che non sia impostata (o semplicemente rimossa!). Se vedi una riga come config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10
, sappi che il || 10
sta effettivamente impostando un valore predefinito basso di 10 secondi. Questo modello è rimasto nella codebase di rails per un certo periodo, fino a quando la modifica non è stata ripristinata
a causa di vari problemi, tra cui uccidere le query di lunga durata
, ma è ancora consigliato da Heroku
.
Se la disabilitazione del reaper risolve le cose, consiglierei di lasciarlo disabilitato. Rails non lo imposta più per impostazione predefinita e sembra causare più problemi di quanti ne risolva.
Ho avuto un errore come il tuo ed è così che l'ho risolto. Personalmente lo tengo disabilitato. Ho scritto del mio problema specifico in modo più dettagliato sul mio blog .