2012-04-04 51 views
5

嗨我正在使用HTTPClient gem,並且遇到問題;我用它來註冊用戶。雖然運行用戶名和密碼插入到我的數據庫,但它等待很長時間,並返回給我Ruby on Rails中的HTTPClient :: ReceiveTimeoutError

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

我該如何解決我的問題?

回答

5

我猜你的http連接或遠程連接不穩定。 每當我有這種情況,我使用超時並重試幾次。 以下代碼將執行您的代碼10秒,如果未完成,它將超時並重試。如果重試失敗很多次,它最終會失敗。

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

我已經使用超時::超時(10000):) – yagmurdursun 2012-04-06 13:17:39

+0

美麗。當交換器在一個大型收件箱中超時時,可以發揮魅力。謝謝。 – avguchenko 2013-11-01 16:36:48

11

用於receive_timeout錯誤;

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

你也可以設置'send_timeout = 0'和'receive_timeout = 0'不超時。 – tamersalama 2012-09-25 19:47:05

0

當你永遠得到一個HTTP:ReceiveTimeOutError,這意味着請求已發送和已完成等待一個特定的時間和由於沒有響應,時間內,它過期,你會得到這個錯誤。

總是指定更多時間,以便它等待更長的響應時間。