【问题标题】:On Heroku, Cedar, with Unicorn: Getting ActiveRecord::StatementInvalid: PGError: SSL SYSCALL error: EOF detected在 Heroku、Cedar 和 Unicorn 上:Getting ActiveRecord::StatementInvalid: PGError: SSL SYSCALL error: EOF detected
【发布时间】:2012-01-19 18:55:07
【问题描述】:

Heroku 支持人员表示,这与他们在共享数据库上的 libssl 版本有关,但我们也曾在专用数据库上的项目中遇到过这种情况。

基本上,在我们迁移到新 Cedar 堆栈且 Unicorn 配置为 3 个工作人员的每个项目中,此错误经常发生(接近于部署后):

错误信息:

ActiveRecord::StatementInvalid: PGError: SSL SYSCALL error: EOF detected : SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.at

Where:
some_controller#index
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/activerecord-3.0.11/lib/active_record/connection_adapters/postgresql_adapter.rb, line 505

除了可能等待我们升级共享数据库服务器需要多长时间之外,heroku 还没有任何答案*,我在 google 上没有找到任何东西。

他们还建议这与 unicorn 的工作人员重叠有关,我们应该切换到 Thin,但性能提升非常值得偶尔出现错误(我认为!)。我希望有一种方法可以配置 Unicorn 以防止重叠。

有没有人遇到过这种情况,如果有,您采取了哪些措施来解决它?谢谢!

*不是他们的真话,只是我在他们回应后的感受。

【问题讨论】:

  • 是他们的支持团队说的话吗?如果是这样,那就太不专业了……
  • 我遇到了同样的错误。我正在与 3 名工人一起使用独角兽。
  • 不,这不是他们的原话,只是他们给我的感觉:不确定它何时会更新,它可能无法解决问题。他们说我们应该尝试专用数据库,但我们在专用的应用程序上看到了同样的错误。
  • 为了将来参考,在我们将preload_app true 添加到 unicorn.rb 后,这个错误开始发生在我们身上。
  • 是的,New Relic 插件需要 preload_app true

标签: ruby-on-rails ruby-on-rails-3 postgresql heroku unicorn


【解决方案1】:

Heroku 支持建议我将其添加到我的 Unicorn 配置中:

追加到您的config/unicorn.rb:

after_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection 
  end
end

我添加了它,我们一整天都没有看到一个 PGError: SSL SYSCALL 错误。

【讨论】:

  • 也为我工作。我还认为我的问题始于我介绍 New Relic 和 preload app true 选项。这似乎为我解决了问题。
  • 是的!非常感谢!正要向 Heroku 开一张支持票。
猜你喜欢
  • 2012-12-16
  • 2021-04-10
  • 2012-02-05
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多