2014-11-07 11 views
10

Tôi nhận được một cách ngẫu nhiên và rất thường xuyên các lỗi sau trong nhật ký của tôi:Heroku + Rails + PG: ActiveRecord :: StatementInvalid (PG :: ConnectionBad: PQconsumeInput() kết nối SSL đã bị đóng cửa bất ngờ

Nov 06 05:31:21 lmrapp app/web.2: [wbinternacional] [0f0965e3-e537-4aed-8f3e-311a222e8fa1] PG::ConnectionBad: PQconsumeInput() SSL connection has been closed unexpectedly 
Nov 06 05:31:21 lmrapp app/web.2: [wbinternacional] [0f0965e3-e537-4aed-8f3e-311a222e8fa1] Completed 500 Internal Server Error in 23ms 
Nov 06 05:31:21 lmrapp app/web.2: FATAL: terminating connection due to administrator command 
Nov 06 05:31:21 lmrapp app/web.2: ActiveRecord::StatementInvalid (PG::ConnectionBad: PQconsumeInput() SSL connection has been closed unexpectedly 

thể đó là do giới hạn kết nối của kế hoạch Thạc tôi trên Heroku (tôi có "Hobby-cơ bản" có 20 kết nối)?

Cảm ơn

+0

khá, có, vui lòng mở vấn đề để hỗ trợ herokus. và cung cấp liên kết đến nó ở đây. –

Trả lời

15

tôi nhận được lỗi chính xác như vậy. tôi cũng trên Sở thích cơ bản của Heroku, tôi đã đặt vé với Heroku, đây là câu trả lời:

Lỗi "Kết nối SSL đã bị đóng bất ngờ" (và một vài lỗi tương tự) là lỗi phía máy khách cho biết kết nối cơ sở dữ liệu của bạn đã biến mất. Một trong những hạn chế của cơ sở dữ liệu tầng sở thích là bảo trì không báo trước. Đôi khi chúng ta cần phải đóng một số kết nối đến cơ sở dữ liệu tầng sở thích, và khi chúng ta làm điều đó, ứng dụng sẽ thường thấy một lỗi như thế này.

Hầu hết các ứng dụng duy trì một nhóm kết nối (như ActiveRecord trong Rails) chỉ có thể mở một kết nối mới vào cơ sở dữ liệu. Tuy nhiên, trong một số trường hợp, một ứng dụng sẽ không thể kết nối lại. Nếu điều đó xảy ra, bạn có thể khởi động lại dyno đó để có được một quy trình mới trên một thời gian chạy mới.

Chạy cơ sở dữ liệu tầng sở thích trong sản xuất thường không được khuyến nghị. Tuy nhiên, nếu bạn định cấu hình ứng dụng của mình thực sự gặp sự cố về các lỗi kết nối cơ sở dữ liệu lặp lại - theo cách đó, ứng dụng sẽ tự động bắt đầu một thời gian chạy mới với một nhóm kết nối mới.

Dường như điều này đã xảy ra rất nhiều cho bạn; trong trường hợp đó, tôi khuyên bạn nên pgbackups:transfer để di chuyển cơ sở dữ liệu sang một máy chủ được chia sẻ khác. Hãy nhớ rằng các quy tắc tầng sở thích áp dụng cho gói 9 đô la cơ bản cũng như cơ sở dữ liệu miễn phí. Hãy cho tôi biết nếu bạn có thêm bất kỳ câu hỏi nào. Cảm ơn!

Với tôi điều này về cơ bản có nghĩa là Heroku không quan tâm sửa lỗi này và muốn bạn nâng cấp lên cơ sở dữ liệu $ 50. Bây giờ tôi đang chạy một trang web nhỏ, nơi tôi nhận được 4-5 người dùng/ngày - không có cách nào tôi muốn chuyển sang trang web sản xuất. Tôi nhận được cùng một lỗi mà bạn đã đề cập ít nhất 5-6 lần/ngày và vẫn chưa tìm ra cách sửa lỗi này. Hãy thử chuyển đổi db của bạn sang một máy chủ được chia sẻ khác - điều này không hiệu quả đối với tôi.

+0

Vâng, cuối cùng tôi đã phải nâng cấp lên gói $ 50 Postgres. Sau đó, lỗi không xuất hiện nữa. –

+1

Tôi sẽ không quá chắc chắn về điều đó. Tôi đang ở kế hoạch $ 50 và thỉnh thoảng tôi thấy lỗi này.Rất hiếm khi tất nhiên, nhưng nó vẫn còn đó. – Jerry

0

Tôi gặp vấn đề này mọi lúc và rất khó chịu. Đặc biệt khi bạn đang cố gắng xây dựng một ứng dụng và không muốn trả $ 50/tháng trong khi vẫn đang phát triển. Một trong những điều lớn nhất mà tôi đã nhận thấy giúp là đảm bảo rằng bạn không có một cái gì đó như DB Visualizer hoặc DBMS khác đang chạy trong khi bạn đang phát triển. Tôi biết nó có vẻ phản trực giác nhưng nó chắc chắn giúp giữ cho bể db giải phóng.

Ngoài ra, nếu bạn đang chạy ROR bạn có thể thử thêm pool: 1 đến chuỗi kết nối mặc định của bạn để đảm bảo ứng dụng của bạn không cố gắng để kết nối với postgres hơn postgres bạn thiết lập này sẽ cho phép trên Heroku.

default: &default 
    adapter: postgresql 
    encoding: unicode 
    pool: 1 

Hy vọng điều này sẽ giúp một số người ở ngoài đó!

Các vấn đề liên quan