Existuje další potenciální důvod této chyby, a to je fond připojení ActiveRecord žací stroj . Je-li povoleno, reaper vyhledá ve fondu připojení "mrtvá" připojení a uzavře je. Při mém testování se zdá, že je příliš horlivý a také uzavírá dokonale živá spojení (obecně ta, která mají o něco větší dotazy).
Zkuste vymazat reaping_frequency
z konfigurace DB (která ji vypne) a zjistěte, zda to pomůže. Naskenujte svou kódovou základnu pro tento řetězec a ujistěte se, že není nastaven (nebo je jednoduše odstraněn!). Pokud vidíte řádek jako config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10
, vězte, že || 10
ve skutečnosti nastavuje nízkou výchozí hodnotu 10 s. Tento vzor byl nějakou dobu v kódové základně rails, dokud nebyla změna vrácena zpět
protože to způsobuje různé problémy, včetně zabíjení dlouhotrvajících dotazů
, ale stále jej doporučuje Heroku
.
Pokud se deaktivací reaperu věci vyřeší, doporučoval bych jej nechat vypnutý. Rails to již nenastavuje ve výchozím nastavení a zdá se, že způsobuje více problémů, než řeší.
Měl jsem chybu jako ty a tak jsem to opravil. Osobně to nechávám vypnuté. O svém konkrétním problému jsem psal podrobněji na svém blogu .