= La richiesta Hackney (tramite HTTPost) non restituisce risultati durante l'esecuzione. = Ciao, ho un semplice chat bot scritto in elisir. Uno dei miei casi d'uso è inviare una query a un particolare URL. Mi aspettavo che il server delle query rispondesse un po'lentamente (pochi secondi). Ho scritto il mio codice e nella mia connessione alla macchina il codice della query funziona normalmente. Ma quando ho distribuito la mia applicazione a un VPS, la query non ha restituito una risposta, né un errore o alcun messaggio Questo mi fa impazzire dato che non ho modo di eseguire il debug poiché la chiamata stessa sembra essere bloccata e non ritorna indefinitamente. L'esecuzione manuale di curl nel contenitore funziona, l'esecuzione della richiesta all'interno di iex che remota il nodo in esecuzione funziona, ma nel sistema live non funziona. Qualcuno potrebbe aiutarmi forse? Di seguito è riportato lo snippet del codice in questione: http_config = [ hackney: [pool: :tl], recv_timeout: 30_000, timeout: 30_000 ] con {:ok, body}<- Jason.encodesrc"=>query {: ok, %HTTPoison.Response{body: body}}<- HTTPoison.post(url, body,http_config), {:ok, result"=>risultato, "src_lang"=>src_lang}}<- Jason.decode(body) termina il risultato |>IO.inspect(label: :result) Modifica: ho aggiunto la linea di ispezione che rappresenta. A volte questo frammento funziona normalmente, a volte no. Quando ho ospitato questo programma nel VPS dedicato a buon mercato del Black Friday del mio amico, non ha mai avuto questo problema. Ma quando mi sono trasferito a Vultr ha questo problema. Ho anche provato su un altro provider VPS che ho usato in passato (ramnode) e ho lo stesso problema La prima cosa che mi salta all'occhio è che la tua istruzione with non ha clausola else, quindi non capirai dove sta fallendo Prova ad aggiungere un altro e una corrispondenza di modello sul file {:error, reason} tupla e scrivila nel log con sth come `Logger.error("Failed http post: #{inspect error Dovresti quindi essere in grado di vedere perché sta fallendo p.s. probabilmente funziona su una shell remota sul tuo sistema locale a causa della chiamata di rete eseguita sulla macchina locale (che esegue il nodo remoto) piuttosto che sul server di distribuzione. Per garantire che la chiamata di rete avvenga sul server remoto, genera un processo sul nodo remoto (Node.spawn, ad esempio) che effettua la chiamata http Ah, mi dispiace che lo snippet non racconti l'intera storia, ma dopo ciò, qualunque cosa accada, ho una riga di logger che dice che il comando ha terminato l'esecuzione e alla fine se il risultato è {: errore, _ } Lo registro. Ma nel mio caso la riga che indica che la funzione ha terminato l'esecuzione non riceve mai chiamate, proprio come la richiesta di post si è appena bloccata in attesa che la mano non sia mai tornata Uso i rilasci ed eseguo il binario di rilascio remoto sul server di distribuzione per connettermi al nodo corrente in esecuzione.