在Heroku上,使用Cedar和Unicorn:出现ActiveRecord :: StatementInvalid错误:PGError:SSL SYSCALL错误:检测到EOF。

10

Heroku 支持表示这与他们共享数据库上的 libssl 版本有关,但我们在独立数据库上的项目中也遇到了此问题。

基本上,在每个我们将其移动到新的 Cedar 栈并配置 Unicorn 为 3 个 worker 的项目中,这个错误会间歇性地发生(更靠近部署后):

错误消息:

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 以防止重叠。

如果有人遇到过这种情况,那么你是如何解决的?谢谢!

*不是他们真正的话,只是他们回复后我的感觉。


他们的支持团队确实是这样说的吗?如果是,那非常不专业... - leonardoborges
我得到了相同的错误。我正在使用带有3个工作进程的独角兽。 - soulnafein
不,那不是他们真正的话,只是让我感觉到:不确定更新时间,并且可能无法解决问题。他们说我们应该尝试一个专用的数据库,但我们在一个已经拥有专用数据库的应用程序上看到了相同的错误。 - Joe Sak
为了以后的参考,我们在unicorn.rb中添加了preload_app true之后,出现了这个错误。 - CMW
是的,New Relic插件需要preload_app true。 - Joe Sak
1个回答

24

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йҖүйЎ№ж—¶ејҖе§Ӣзҡ„гҖӮиҝҷдјјд№ҺеҜ№жҲ‘жңүз”ЁгҖӮ - Andrew
是的!非常感谢!我正准备向Heroku提交支持工单。 - ndbroadbent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接