= Hackney(通过 HTTPost)请求在运行时不返回结果。 = 嗨,我有一个用 elixir 编写的简单聊天机器人。我的一个用例是向特定的 url 发送一些查询。我希望查询服务器响应有点慢(几秒钟)。我已经编写了我的代码,并且在我的机器连接中,查询代码运行正常。但是当我将我的应用程序部署到 VPS 时,查询只是不返回响应,而不是错误或任何消息 这有点让我发疯,因为我没有任何方法来调试它,因为调用本身似乎被卡住了并且不会无限期地返回。在容器中手动运行 curl 确实有效,在远程运行节点的 iex 中运行请求确实有效,但在实时系统中它不起作用。有人可以帮助我吗?以下是相关代码的片段: http_config = [ hackney: [pool: :tl], recv_timeout: 30_000, timeout: 30_000 ] with {:ok, body}<- Jason.encodesrc"=>query {:好的,%HTTPPoison.Response{body: body}}<- HTTPoison.post(url, body,http_config), {:ok, result"=>result, "src_lang"=>src_lang}}<- Jason.decode(body) 做结果结束 |>IO.inspect(label: :result) 编辑:我添加了代表检查线。有时这个片段确实运行正常,有时却没有。当我在我朋友的黑色星期五肮脏便宜的专用 VPS 上托管这个程序时,它从来没有遇到过这个问题。但是当我搬到 Vultr 时就有这个问题。我也试过我过去使用的另一个 VPS 提供商 (ramnode) 并且有同样的问题 我突然想到的第一件事是你的 with 语句没有 else 子句,所以你不会发现它失败的地方 尝试在 {:error, reason} 元组并将其写入日志,例如 `Logger.error("Failed http post: #{inspect error 然后你应该能够看到它失败的原因 附:由于网络调用是在本地计算机(运行远程节点)而不是部署服务器上完成的,因此它可能在本地系统的远程 shell 上工作。为确保网络调用发生在远程服务器上,在远程节点(例如 Node.spawn)上生成一个进程来进行 http 调用 啊,对不起,这个片段并没有说明全部,但在那之后,无论发生什么,我都有一个记录器行,它告诉命令已经完成运行,最后如果结果是 {:error, _我记录它。但在我的例子中,告诉函数已经完成运行的那一行永远不会被调用,就像发布请求只是卡住等待手永远不会返回一样 我使用发布,并在部署服务器上远程运行发布二进制文件以连接到当前运行的节点。