【问题标题】:end of file reached EOFError (Databasedotcom + Rails + Heroku)文件结尾到达 EOFError (Databasedotcom + Rails + Heroku)
【发布时间】:2013-07-05 09:52:18
【问题描述】:

在尝试自己弄清楚这一点感到非常沮丧之后,我正在寻求 SO 伙计们(你们!)来帮助我追踪这个可怕的错误:

消息:文件末尾到达 EOFError 回溯: ["/app/vendor/ruby-1.9.3/lib/ruby/1.9.1/openssl/buffering.rb:174:in `sysread_nonblock

背景:我的应用是托管在 Heroku 和 100% 后端应用上的 Rails 3 应用。它使用 Redis/Resque 工作人员处理使用 Chatter REST API 从 Salesforce 接收的有效负载。

麻烦:与 Ruby 中的 HTTPS/OpenSSL 中的其他类似 EOF 错误不同,我的错误发生非常随机(因为我还无法预测何时会出现)。

通常的嫌疑人:当我尝试创建 45 个 Resque 工作人员并尝试同时从 45 个不同的 Salesforce Chatter REST API 连接同步数据时,经常会注意到该错误!它是如此频繁,以至于我的处理失败了总数的 20% 或更多,而且都是由于这个错误。

补救措施: 我正在使用使用 HTTPS 的 Databasedotcom gem,并按照所有必需的步骤进行连接以创建健全的 HTTPS 连接。 所以...

  • 使用在 HTTPS 中设置的 SSL - 选中
  • URI 编码 - 已检查
  • Ruby 1.9.3 - 检查
  • HTTP 读取超时设置为 900(15 分钟)
  • 我在每次重试前 30 秒休眠后重试此 EOF 错误 MAX 30 次! 尽管如此,它还是会失败一些数据。

这里有什么帮助吗?

【问题讨论】:

  • 我遇到了同样的问题。你介意分享一下你最终做了什么吗?

标签: ruby-on-rails ruby https salesforce


【解决方案1】:

您是否考虑过 Salesforce 可能不喜欢来自单一来源的如此多的连接,并且您被 DDOS 防护程序阻止?

另外,设置这些长时间的超时也没什么用。如果连接失败,请将其删除并自行重新安排新的连接。这就是 Resque 做得很好的地方,如果它一直有问题,它会增加等待时间......

【讨论】:

  • 感谢 Hugo,感谢 Salesforce 的 DDOS!但我不明白我怎么能“如果连接失败,放弃它并自己重新安排一个新的”。这样做?
  • 如果你将建立连接放在 Resque 任务中,并告诉 Resque 操作失败(当然,当它失败时),Resque 将重新安排任务本身,然后当然会尝试新的连接做出来。
猜你喜欢
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 2011-07-11
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多