2012-04-04 39 views
5

Hi Tôi đang sử dụng đá quý HTTPClient và tôi có một vấn đề; Tôi sử dụng nó để đăng ký người dùng. Trong khi chạy tên người dùng và mật khẩu được chèn vào cơ sở dữ liệu của tôi nhưng nó chờ đợi lâu và trả lại cho tôiHTTPClient :: ReceiveTimeoutError trong Ruby on Rails

HTTP Client::ReceiveTimeout Error in User Controller#signup execution expired. 

làm cách nào để khắc phục sự cố của mình?

Trả lời

5

Tôi đoán kết nối http của bạn hoặc kết nối từ xa không ổn định. Bất cứ khi nào tôi có tình huống đó, tôi sử dụng thời gian chờ và thử lại vài lần. Đoạn mã sau sẽ thực thi mã của bạn trong 10 giây và nếu không hoàn thành, mã sẽ hết thời gian chờ và thử lại. Nếu thử lại không thành công nhiều lần, nó sẽ thất bại sau cùng.

def timeout_and_retry 
    retries = 0 
    begin 
    Timeout::timeout(10) { yield } 
    rescue Timeout::Error 
    raise if (self.retries += 1) > 3 
    retry 
    end 
end 

timeout_and_retry do 
    # http client get code goes here 
end 
+0

Tôi đã được sử dụng Timeout :: timeout (10000) :) – yagmurdursun

+0

Đẹp. Làm việc một sự quyến rũ khi trao đổi thời gian chờ trên một hộp thư đến lớn. Cảm ơn bạn. – avguchenko

11

Sử dụng cho lỗi receive_timeout;

client = HTTPClient.new 
client.receive_timeout = 10000 # setting receivetimeout for HTTPClient! 
+4

bạn cũng có thể đặt 'send_timeout = 0' và' receive_timeout = 0' không thành thời gian chờ. – tamersalama

0

Khi bao giờ bạn nhận được một HTTP: ReceiveTimeOutError, nó có nghĩa là yêu cầu đã được gửi đi và nó đã làm chờ đợi một thời gian cụ thể và vì không có phản ứng, trong thời điểm đó, nó hết hạn và bạn nhận được lỗi này.

Luôn chỉ định thêm thời gian để nó chờ lâu hơn để phản hồi.