Có một lý do tiềm ẩn khác cho lỗi này và đó là nhóm kết nối ActiveRecord máy gặt . Khi được kích hoạt, máy gặt sẽ quét nhóm kết nối để tìm các kết nối "chết" và đóng chúng. Trong thử nghiệm của tôi, nó dường như quá nóng vội và đóng các kết nối hoàn toàn còn tồn tại (thường là các kết nối đang chạy các truy vấn lớn hơn một chút).
Hãy thử xóa reaping_frequency
từ cấu hình DB của bạn (đã tắt nó đi) và xem điều đó có hữu ích không. Quét cơ sở mã của bạn để tìm chuỗi đó và đảm bảo rằng nó chưa được đặt (hoặc chỉ đơn giản là bị xóa!). Nếu bạn thấy một dòng như config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10
, biết rằng || 10
thực sự đang đặt mặc định thấp là 10 giây. Mẫu này đã ở trong cơ sở mã rails trong một thời gian, cho đến khi thay đổi được hoàn nguyên
do nó gây ra nhiều vấn đề khác nhau, bao gồm cả loại bỏ các truy vấn đang chạy
, nhưng vẫn được đề xuất bởi Heroku
.
Nếu vô hiệu hóa máy gặt sẽ khắc phục được mọi thứ, tôi khuyên bạn nên tắt nó đi. Rails không còn đặt nó theo mặc định nữa và nó dường như gây ra nhiều vấn đề hơn là nó có thể giải quyết được.
Tôi đã gặp lỗi giống như lỗi của bạn, và đó là cách tôi sửa nó. Cá nhân, tôi đang giữ nó vô hiệu hóa. Tôi đã viết chi tiết hơn về vấn đề cụ thể của mình trên blog .