3

我最近在 Heroku 上遇到了由PG::Error SSL SYSCALL error: EOF detected.

堆栈跟踪的相关部分包括:

2013-04-05T22:07:02+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path=/things/3.json host=things.herokuapp.com fwd="184.72.72.117" dyno=web.2 connect=1ms service=30003ms status=503 bytes=0):
2013-04-05T22:07:58+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:294:in `dealloc'
2013-04-05T22:07:58+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:277:in `clear'
2013-04-05T22:07:58+00:00 app[web.1]: PG::Error (SSL SYSCALL error: EOF detected
2013-04-05T22:07:58+00:00 app[web.1]:   vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.11/lib/active_record/connection_adapters/postgresql_adapter.rb:339:in `clear_cache!'

Heroku 的文档列出了此错误的常见原因。由于我没有使用 Resque 或 Unicorn,这似乎是由网络分区引起的。

相同的文档说:“当 Heroku 检测到崩溃时,我们会杀死该测功机并启动一个新的测功机,从而重新建立连接。” 这不是我的经验。该应用程序仅在我运行时恢复heroku restart。我宁愿在应用程序级别处理此错误,而不是依赖 Heroku 的测功机管理来拯救我。

有什么方法可以捕获“检测到 EOF”错误并自动重试,直到应用程序重新连接?

4

0 回答 0