Heroku + Rails + PG:ActiveRecord :: StatementInvalid(PG :: ConnectionBad:PQconsumeInput()SSL连接意外关闭

时间:2014-11-07 02:15:09

标签: ruby-on-rails postgresql activerecord ssl heroku

我在日志中随机且非常频繁地收到以下错误:

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 

可能是由于我的PGB计划在heroku上的连接限制(我有" Hobby-basic"它有20个连接)?

由于

2 个答案:

答案 0 :(得分:15)

我收到完全相同的错误。我也是一个Heroku Hobby-basic数据库。我和Heroku一起买了一张票,这是回复:

  

“SSL连接已意外关闭”错误(以及一些类似的错误)是客户端错误,表明您的数据库连接已消失。业余爱好层数据库的一个限制是未经宣布的维护。我们偶尔需要关闭一些与业余爱好层数据库的连接,当我们这样做时,应用程序通常会看到类似这样的错误。

     

维护连接池的大多数应用程序(如Rails中的ActiveRecord)只能打开与数据库的新连接。但是,在某些情况下,应用程序将无法重新连接。如果发生这种情况,你可以重新启动该dyno以在新的运行时获得一个新进程。

     

通常不建议在生产中运行业余爱好层数据库。但是,如果你要这样做,那么配置你的应用程序实际上会对重复的数据库连接错误造成崩溃是有帮助的 - 这样,它将自动启动一个带有新连接池的新运行时。

     

看起来这对你来说已经发生了很多事情;在这种情况下,我建议使用 pgbackups:transfer 将数据库移动到另一个共享服务器。请记住,业余爱好等级规则适用于$ 9基本计划以及免费数据库。如果您有任何其他问题,请与我们联系。谢谢!

对我而言,这基本上意味着Heroku不关心修复此错误并希望您升级到50美元的数据库。现在我正在运行一个小型网站,我每天可以获得4-5个用户 - 我还没有办法切换到生产网站。我得到了你提到的同样的错误至少5-6次/天仍然没有找到解决这个问题的方法。尝试将数据库切换到另一个共享服务器 - 这对我不起作用。

答案 1 :(得分:0)

我一直都会遇到这个问题而且非常讨厌。特别是当您尝试构建应用程序并且不想在开发期间每月支付50美元时。我注意到的最重要的事情之一就是确保在开发过程中没有DB Visualizer或其他DBMS运行的东西。我知道它似乎反直觉,但它确实有助于保持数据库池的释放。

此外,如果您正在运行RoR,您可以尝试将pool: 1添加到您的默认连接字符串,以确保您的应用不会尝试连接到postgres,而不是您的postgres设置允许在Heroku上。

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

希望这可以帮助那些人!