= Hackney (HTTPost 経由) リクエストが実行時に結果を返さない。 = こんにちは、私はエリクサーで書かれたシンプルなチャット ボットを持っています。私のユースケースの 1 つは、特定の URL にクエリを送信することです。クエリ サーバーの応答が少し遅い (数秒) と予想しました。コードを書きましたが、マシン接続でクエリ コードが正常に実行されています。しかし、アプリケーションを VPS にデプロイしたとき、クエリはエラーやメッセージではなく、応答を返しません。 呼び出し自体がスタックしているように見え、無期限に返されないため、デバッグする方法がないため、これはちょっと気が狂います。コンテナーで curl を手動で実行すると機能し、実行中のノードをリモートする iex 内で要求を実行すると機能しますが、ライブ システムでは機能しません。誰でも私を助けることができますか?以下は、問題のコードのスニペットです。 http_config = [ hackney: [pool: :tl], recv_timeout: 30_000, timeout: 30_000 ] with {:ok, body}<- Jason.encodesrc"=>query {: ok, %HTTPoison.Response{body: body}}<- HTTPoison.post(url, body,http_config), {:ok, result"=>result, "src_lang"=>src_lang}}<- Jason.decode(body) do 結果 end |>IO.inspect(label: :result) 編集:代表的な検査行を追加しました。このスニペットは正常に実行される場合と実行されない場合があります。友人のブラック フライデー ダート チープ専用 VPS でこのプログラムをホストしたとき、この問題は発生しませんでした。しかし、Vultrに移行したとき、この問題が発生しました。過去に使用した別の VPS プロバイダー (ramnode) も試しましたが、同じ問題があります。 私に最初に飛び出すのは、 with ステートメントに else 句がないため、失敗した場所をキャッチできないことです にelseとパターンマッチを追加してみてください {:error, reason} タプルを書き、`Logger.error("Failed http post: #{inspect error その後、失敗した理由を確認できるはずです 追記デプロイ サーバーではなくローカル マシン (リモーティング ノードを実行している) でネットワーク呼び出しが行われるため、ローカル システムのリモート シェルで動作する可能性があります。ネットワーク呼び出しがリモート サーバーで発生していることを確認するには、http 呼び出しを行うリモート ノード (Node.spawn など) でプロセスを生成します。 ああ、申し訳ありませんが、スニペットはすべてのストーリーを伝えていませんが、その後、何が起こっても、コマンドの実行が終了したことを伝えるロガー行があり、最終的に結果が {:error, _ の場合ログに記録します。しかし、私の場合、関数の実行が終了したことを示す行は呼び出されません。ポストリクエストがスタックして待っている手が返されなかったのと同じです 私はリリースを使用し、デプロイ サーバーでリリース バイナリ リモートを実行して、現在実行中のノードに接続します。