= Żądanie Hackney (przez HTTPost) nie zwraca wyniku podczas działania. = Cześć, mam prostego chatbota napisanego w eliksie. Jednym z moich zastosowań jest wysłanie zapytania do określonego adresu URL. Spodziewałem się, że serwer zapytań odpowie nieco wolno (kilka sekund). Napisałem mój kod iw moim połączeniu z komputerem kod zapytania działa normalnie. Ale kiedy wdrożyłem moją aplikację na VPS, zapytanie po prostu nie zwraca odpowiedzi, ani błędu, ani żadnej wiadomości To trochę doprowadza mnie do szału, ponieważ nie mam żadnego sposobu na debugowanie, ponieważ samo połączenie wydaje się być zablokowane i nie wraca w nieskończoność. Ręczne uruchamianie curl w kontenerze działa, uruchamianie żądania wewnątrz iex, które zdalnie uruchamia działający węzeł, działa, ale w systemie na żywo nie działa. Ktoś może mi pomóc? Poniżej znajduje się fragment kodu, o którym mowa: http_config = [ hackney: [pool: :tl], recv_timeout: 30_000, timeout: 30_000 ] z {:ok, body}<- Jason.encodesrc"=>zapytanie {: ok, %HTTPoison.Response{body: body}}<- HTTPoison.post(url, body,http_config), {:ok, result"=>wynik, "src_lang"=>src_lang}}<- Jason.decode(body) do końca wyniku |>IO.inspect(label: :result) Edytuj: Dodałem reprezentującą linię kontroli. Czasami ten fragment działa normalnie, czasami nie. Kiedy hostowałem ten program w tanim, dedykowanym VPS mojego przyjaciela w czarny piątek, nigdy nie miałem tego problemu. Ale kiedy przeniosłem się do Vultr, ma ten problem. Próbowałem również na innym dostawcy VPS, z którego korzystałem w przeszłości (ramnode) i mam ten sam problem Pierwszą rzeczą, która na mnie rzuca się w oczy, jest to, że twoja instrukcja with nie ma klauzuli else, więc nie złapiesz, gdzie zawodzi Spróbuj dodać dopasowanie innego i wzorca w pliku {:błąd, powód} krotka i zapisz ją, aby zalogować się za pomocą czegoś takiego jak `Logger.error("Failed http post: #{inspect error Powinieneś wtedy być w stanie zobaczyć, dlaczego się nie udaje p.s. prawdopodobnie działa na zdalnej powłoce w twoim systemie lokalnym, ponieważ wywołanie sieciowe jest wykonywane na komputerze lokalnym (uruchamiającym węzeł zdalny), a nie na serwerze wdrażania. Aby upewnić się, że połączenie sieciowe odbywa się na zdalnym serwerze, uruchom proces na zdalnym węźle (np. Node.spawn), który wykonuje wywołanie http Ach, przepraszam, fragment nie opowiada całej historii, ale po tym, bez względu na to, co się stanie, mam linię rejestratora, która mówi, że polecenie zostało zakończone, a na końcu, jeśli wynikiem jest {: błąd, _ } Loguję to. Ale w moim przypadku linia, która mówi, że funkcja zakończyła działanie, nigdy nie zostanie wywołana, tak jak prośba o przesłanie właśnie utknęła oczekująca ręka nigdy nie została zwrócona Używam wydań i uruchamiam zdalne binarne wydanie na serwerze wdrażania, aby połączyć się z bieżącym uruchomionym węzłem.