= Запрос Hackney (через HTTPost) не возвращает результат при выполнении. знак равно Привет, у меня есть простой чат-бот, написанный на эликсире. Один из моих вариантов использования - отправить запрос на определенный 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 result end |>IO.inspect(label: :result) Редактировать: я добавил представляющую строку проверки. Иногда этот фрагмент работает нормально, иногда нет. Когда я размещал эту программу на дешевом выделенном VPS моего друга в черную пятницу, у меня никогда не было этой проблемы. Но когда я перешел на Vultr, у него возникла эта проблема. Я также попробовал другого провайдера VPS, которого использовал в прошлом (ramnode), и у меня такая же проблема. Первое, что бросается в глаза, это то, что в вашем операторе with нет пункта else, поэтому вы не поймаете, где он терпит неудачу. Попробуйте добавить совпадение else и шаблона в {:error, Reason} кортеж и записать его в журнал с помощью чего-то вроде `Logger.error("Ошибка http-сообщения: #{ошибка проверки Затем вы сможете увидеть, почему он терпит неудачу p.s. он, вероятно, работает на удаленной оболочке в вашей локальной системе из-за того, что сетевой вызов выполняется на локальном компьютере (на котором запущен удаленный узел), а не на сервере развертывания. Чтобы убедиться, что сетевой вызов происходит на удаленном сервере, создайте процесс на удаленном узле (например, Node.spawn), который выполняет http-вызов. Ах, мне жаль, что фрагмент не рассказывает всю историю, но после этого, независимо от того, что происходит, у меня есть строка логера, которая сообщает, что команда завершила выполнение, и в конце, если результат {: ошибка, _ } Я регистрирую это. Но в моем случае строка, которая сообщает, что функция завершила работу, никогда не получает вызов, это точно так же, как почтовый запрос, просто застрявший в ожидании, никогда не возвращался. Я использую выпуски и запускаю удаленный двоичный файл выпуска на сервере развертывания, чтобы подключиться к текущему работающему узлу.