2016-05-12 13 views
1

現在、ノードhapijsフレームワークを使用してREST APIを作成しています。 APIはHerokuにデプロイされています。Node.jsのHeroku H12タイムアウトエラー

APIにGETエンドポイントがあり、サードパーティからデータを取得するget要求を行い、応答を送信する前にデータを処理します。この特定のエンドポイントは時折タイムアウトします。エンドポイントがタイムアウトすると、HerokuはH12エラーを返します。タイムアウトになると、そのエンドポイントへの後続要求によってH12エラーが発生します。私は、そのエンドポイントを再び動かすために、Heroku上でアプリケーションを再起動する必要があります。 APIの他のエンドポイントは、このエラーによって何らかの影響を受けず、エラーが発生した後も正常に動作します。

私のデバッグプロセスとログを見て、サードパーティAPIから応答が返されず、エラーが発生することがあります。

私は問題を試してみて、解決するために、以下のソリューションを試してみた:

  1. 私が要求を行うために要求ライブラリを使用しています。したがって、私は要求に渡されたオプションの一部として5000ミリ秒のタイムアウトを設定しようとしました。タイムアウトが発生し、エンドポイントは要求に関連するタイムアウトエラーを送信します。これは、エンドポイントへの後続のリクエストが機能するため、私が望むような動作です。ただし、要求のタイムアウトが発生しないが、HerokuがH12エラーを返すこともあります(常にHerokuのデフォルトである30秒後)。その後、そのエンドポイントへのその後の要求はH12エラーを返します(30秒後も)。ある種のプロセスがHeroku上で「スタック」し、アプリケーションを再起動するまで終了しないようです。

  2. タイムアウトをhapi.jsルート設定オブジェクトに追加しようとしました。私は上記と同じ結果を得ます。

  3. 私は引き続き調査を行い、問題がherehereの説明と関係していると考えています。それは、HerokuワーカーにSIGKILLを送ることができるアプリサーバーレベルでタイムアウトを設定するようなことが、そのトリックを行うかもしれないようです。 Rubyではかなり簡単ですが、Nodeでこれを行う方法に関する多くの情報は見つかりません。

いずれの洞察もありがとうございます。第三者に依頼する際にタイムアウトが発生する可能性があることを認識しています。それは問題ではありません。問題は、エンドポイントがタイムアウトした後にHerokuに「スタック」して応答しなくなることです。

ありがとうございました!

答えて

5

私も同様の問題がありましたが、一日をあきらめた後、私はそれに戻り、私のエラーを発見しました。私はサーバー側でエラーが発生したときにクライアントに応答を送信しませんでした。サーバーサイドのアルゴリズムの結果が何であっても応答を返すようにしてください。エラーがある場合は、それを返します。要求が成功した場合は、その応答を返します。私はそれが助けて欲しい

それは特にデバッグ要求は、セクションが助けになる可能性がタイムアウト、Request Timeoutsを扱う上で私たちのHerokuののガイドをチェックし、問題が解決しない場合は、次の

+1

これがあなたを助けている場合、受け入れ答えとしてそれをマークしてください。ありがとう! – lwdthe1

+1

これは私のH12タイムアウトの問題を修正したものです。ありがとう! –

関連する問題