2

自分でそれを理解しようとする多くの欲求不満の後、私はこの手ごわいエラーを追跡するのを手伝ってくれるSOの人たち(あなた!)に手を差し伸べています:

メッセージ: ファイルの終わりに達しました EOFError バックトレース: ["/app/vendor/ruby-1.9.3/lib/ruby/1.9.1/openssl/buffering.rb:174:in `sysread_nonblock

背景: 私のアプリは、Heroku でホストされている Rails 3 アプリであり、100% バックエンド アプリです。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 エラーを最大 30 回再試行します。それでも、一部のデータは失敗します。

ここで何か助けてください。

4

1 に答える 1

0

Salesforce が 1 つのソースからの一度に多くの接続を好まない可能性があり、DDOS 防止機能によってブロックされていると考えたことはありますか?

また、これらの長いタイムアウトを設定してもまったく役に立ちません。接続が失敗した場合は、それをドロップして、自分で新しいものを再スケジュールします。それが Resque の正常な動作です。問題が発生し続けると、待ち時間が加算されます...

于 2013-07-08T08:28:42.870 に答える