= Yêu cầu Hackney (thông qua HTTPost) không trả về kết quả khi chạy. = Xin chào, tôi có một bot trò chuyện đơn giản được viết bằng thuốc tiên. Một trong những trường hợp sử dụng của tôi là gửi một số truy vấn tới một url cụ thể. Tôi mong đợi máy chủ truy vấn phản hồi hơi chậm (vài giây). Tôi đã viết mã của mình và trong kết nối máy của tôi, mã truy vấn đang chạy bình thường. Nhưng khi tôi triển khai ứng dụng của mình lên VPS, truy vấn không trả về phản hồi, không có lỗi hoặc bất kỳ thông báo nào Điều này khiến tôi phát điên vì tôi không có cách nào để gỡ lỗi vì bản thân cuộc gọi dường như bị kẹt và không quay lại vô thời hạn. Chạy curl thủ công trong vùng chứa hoạt động, chạy yêu cầu bên trong iex điều khiển từ xa nút đang chạy hoạt động nhưng trong hệ thống trực tiếp thì không hoạt động. Có ai có thể giúp tôi không? Dưới đây là đoạn mã được đề cập: http_config = [ hackney: [pool: :tl], recv_timeout: 30_000, timeout: 30_000 ] với {:ok, body}<- Jason.encodesrc"=>truy vấn {: ok, %HTTPoison.Response{body: body}}<- HTTPoison.post(url, body,http_config), {:ok, result"=>kết quả, "src_lang"=>src_lang}}<- Jason.decode(body) thực hiện kết quả cuối |>IO.inspect(nhãn: :result) Chỉnh sửa: Tôi đã thêm dòng kiểm tra đại diện. Đôi khi đoạn mã này chạy bình thường đôi khi không. Khi tôi tổ chức chương trình này trong VPS chuyên dụng giá rẻ thứ sáu đen tối của bạn tôi, nó chưa bao giờ gặp sự cố này. Nhưng khi chuyển sang Vultr thì bị lỗi này. Tôi cũng đã thử trên một nhà cung cấp VPS khác mà tôi đã sử dụng trước đây (ramnode) và gặp vấn đề tương tự Điều đầu tiên làm tôi ngạc nhiên là câu lệnh with của bạn không có mệnh đề nào khác, vì vậy bạn sẽ không nắm bắt được nó bị lỗi ở đâu Hãy thử thêm một cái khác và khớp mẫu trên {:error, reason} và ghi nó vào nhật ký với sth like `Logger.error("Bài đăng http thất bại: #{inspect error Sau đó, bạn sẽ có thể thấy tại sao nó không thành công tái bút nó có thể hoạt động trên trình bao từ xa trên hệ thống cục bộ của bạn do cuộc gọi mạng được thực hiện trên máy cục bộ (chạy nút điều khiển từ xa) thay vì trên máy chủ triển khai. Để đảm bảo cuộc gọi mạng đang diễn ra trên máy chủ từ xa, hãy sinh ra một quy trình trên nút từ xa (Node.spawn, ví dụ) thực hiện cuộc gọi http Ah, tôi xin lỗi vì đoạn trích không nói lên toàn bộ câu chuyện, nhưng sau đó, bất kể điều gì xảy ra, tôi có một dòng nhật ký cho biết rằng lệnh đã chạy xong và cuối cùng nếu kết quả là {:error, _ } Tôi đăng nhập nó. Nhưng trong trường hợp của tôi, dòng thông báo chức năng đã chạy xong không bao giờ nhận được cuộc gọi, nó giống như yêu cầu bài viết chỉ chờ đợi bàn tay không bao giờ trở lại Tôi sử dụng các bản phát hành và tôi chạy điều khiển từ xa nhị phân phát hành trên máy chủ triển khai để kết nối với nút hiện tại đang chạy.