2014-10-08 53 views
4

我使用的是httparty(0.13.1)gem。我正在使用httparty進行一系列API調用。我的一些初始API調用成功,但後來的調用連續失敗。我添加了180秒的超時時間。我搜索谷歌,但我仍然找不到任何解決方案。很長時間以來我一直在努力掙扎。在HTTPARTy中處理Net :: ReadTimeout錯誤

我的代碼:

response = HTTParty.get("http://pubapi.cryptsy.com/api.php?method=marketdatav2", timeout: 180) 

錯誤:

A Net::ReadTimeout occurred in background at 2014-10-05 11:42:06 UTC : 

我不知道這一次自己是否在工作?我覺得180秒足以擷取響應,因爲默認的超時時間是60秒。如果我想處理淨讀超時錯誤,有沒有辦法做到這一點?如果發生此錯誤,我想返回零。 或者是否有避免發生此錯誤的最佳解決方案?

+0

你解決了嗎?我也有一系列的API調用相同的問題。超時不適合我。 – 2015-04-24 10:21:11

回答

4

你可以使用rescue來處理你的超時異常:

begin 
    HTTParty.get("http://pubapi.cryptsy.com/api.php?method=marketdatav2", timeout: 180) 
rescue Net::ReadTimeout 
    nil 
end 
+0

這不能解決問題,只能處理錯誤 – ObjectNameDisplay 2017-04-22 14:49:05

9

也有類似的問題,不同的模塊,並在我的情況下,它可能成功,如果重試,所以我抓住超時和重試。

max_retries = 3 
    times_retried = 0 

    begin 
    #thing that errors sometimes 

    rescue Net::ReadTimeout => error 
    if times_retried < max_retries 
     times_retried += 1 
     puts "Failed to <do the thing>, retry #{times_retried}/#{max_retries}" 
     retry 
    else 
     puts "Exiting script. <explanation of why this is unlikely to recover>" 
     exit(1) 
    end 
    end 

如果有人發現它有幫助,留在這裏。