= Hackney-Anfrage (über HTTPost) gibt beim Ausführen kein Ergebnis zurück. = Hallo, ich habe einen einfachen Chat-Bot, der in Elixir geschrieben ist. Einer meiner Anwendungsfälle besteht darin, eine Abfrage an eine bestimmte URL zu senden. Ich habe erwartet, dass der Abfrageserver etwas langsam antwortet (wenige Sekunden). Ich habe meinen Code geschrieben und in meiner Maschinenverbindung läuft der Abfragecode normal. Aber als ich meine Anwendung auf einem VPS bereitgestellt habe, gab die Abfrage einfach keine Antwort zurück, keinen Fehler oder eine Nachricht Das macht mich irgendwie verrückt, da ich keine Möglichkeit habe, es zu debuggen, da der Anruf selbst hängen zu bleiben scheint und nicht auf unbestimmte Zeit zurückkehrt. Das manuelle Ausführen von curl im Container funktioniert, das Ausführen der Anforderung innerhalb von iex, die den laufenden Knoten entfernt, funktioniert, aber im Live-System funktioniert es nicht. Wer könnte mir vielleicht helfen? Unten ist der Ausschnitt des betreffenden Codes: http_config = [ hackney: [pool: :tl], recv_timeout: 30_000, timeout: 30_000 ] mit {: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) Ende des Ergebnisses |>IO.inspect(label: :result) Bearbeiten: Ich habe die darstellende Inspektionszeile hinzugefügt. Manchmal läuft dieses Snippet normal, manchmal nicht. Als ich dieses Programm im spottbilligen VPS meines Freundes hostete, hatte es nie dieses Problem. Aber als ich zu Vultr gewechselt bin, hat es dieses Problem. Ich habe auch einen anderen VPS-Anbieter ausprobiert, den ich in der Vergangenheit verwendet habe (ramnode), und habe das gleiche Problem Das erste, was mir auffällt, ist, dass Ihre with-Anweisung keine else-Klausel enthält, sodass Sie nicht erkennen, wo sie fehlschlägt Versuchen Sie, eine andere und Musterübereinstimmung auf der hinzuzufügen {:Fehler, Grund}-Tupel und schreiben Sie es ins Protokoll mit etw wie `Logger.error("Failed http post: #{inspect error Dann solltest du sehen können, warum es nicht funktioniert p.s. Es funktioniert wahrscheinlich auf einer Remote-Shell auf Ihrem lokalen System, da der Netzwerkaufruf auf dem lokalen Computer (auf dem der Remoting-Knoten ausgeführt wird) und nicht auf dem Bereitstellungsserver erfolgt. Um sicherzustellen, dass der Netzwerkaufruf auf dem Remote-Server erfolgt, erstellen Sie einen Prozess auf dem Remote-Knoten (z. B. Node.spawn), der den HTTP-Aufruf durchführt Ah, tut mir leid, dass das Snippet nicht die ganze Geschichte erzählt, aber danach habe ich, egal was passiert, eine Logger-Zeile, die besagt, dass der Befehl beendet wurde, und am Ende, wenn das Ergebnis {:error, _ } Ich protokolliere es. Aber in meinem Fall wird die Zeile, die mitteilt, dass die Funktion beendet wurde, nie aufgerufen, es ist genau wie die Post-Anfrage, die gerade hängen geblieben ist, und die Hand nie zurückgegeben hat Ich verwende Releases und führe die Release-Binärdatei remote auf dem Bereitstellungsserver aus, um eine Verbindung zum aktuell ausgeführten Knoten herzustellen.