tôi có các thiết lập của ứng dụng Rails của tôi như sau:Rails sản xuất "PGError: Máy chủ đã đóng kết nối bất ngờ" sau một thời gian chờ
- Rails: 3.0.5 (dưới Apache proxy) chạy trên RHEL 5.6
- Postgres: 8.4, chạy trên Windows Server 2008 2 máy chủ trên cùng một mạng LAN.
Vấn đề là, sau một thời gian nhàn rỗi, khi tôi thực hiện một yêu cầu mới vào ứng dụng Rails, nó mang lại cho tôi những lỗi sau:
ActiveRecord::StatementInvalid (PGError: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Từ những gì tôi đã nghiên cứu, có vẻ như rằng kết nối cơ sở dữ liệu bị giảm sau một thời gian chờ bởi Postgres. Trong thời gian này, từ phía Rails,
- nếu tôi thực hiện một yêu cầu đến Rails (1st theo yêu cầu), nó sẽ hiển thị các lỗi kết nối như trên
- nếu tôi thực hiện một yêu cầu đến Rails (2nd yêu cầu) Rails dường như kết nối lại với Postgres và hoạt động chính xác.
Điều đó có nghĩa là tôi sẽ luôn gặp phải lỗi kết nối đầu tiên sau đó sẽ hoạt động bình thường trở lại, rất nghiêm trọng trong trường hợp của tôi vì tôi muốn gửi phản hồi không đúng cho khách hàng của mình.
tôi luôn nhìn vào câu hỏi và câu trả lời sau, nhưng họ dường như không phù hợp với trường hợp của tôi:
- "PGError: no connection to the server" after idle (Ubuntu cho DB server)
- How to use tcp_keepalives settings in Postgresql? (keepalives trong hệ điều hành MacOS)
Bạn có lời khuyên nào để làm cho ứng dụng của tôi không bị lỗi kết nối db không? Cảm ơn bạn.
Tôi gặp lỗi tương tự khi sử dụng postgresql với heroku – Salil
Việc kết nối sẽ biến mất là điều bình thường. Nó không phải là bình thường để Rails đối xử với nó quá vô ơn. Kiểm tra trình điều khiển cơ sở dữ liệu (adapter) của bạn đang thực hiện 'verify!' Và 'active?'; bình thường 'ActiveRecord :: ConnectionAdapters :: ConnectionPool' cung cấp cho các bộ chuyển đổi một cơ hội để kết nối lại bất kỳ kết nối cũ ngay lập tức trước khi kiểm tra nó ra khỏi hồ bơi. Bạn đang sử dụng gem nào cho Postgres? – vladr