2012-03-13 34 views
2

我有一個腳本,調用Facebook測試api自動化測試帳戶創建。從看似隨機的時間間隔,從50次請求到6000次請求之後,我得到一個未被捕獲的異常。我對如何找出錯誤是無法理解的,所以我將從這裏的相關代碼開始。未捕獲的異常與紅寶石淨/ http請求包裝

我沒有使用URI庫,因爲facebook鍵的管道字符會破壞ruby 1.8.7的URI.parse。

require 'rubygems' 
require 'net/https' 
require 'json' 



http = Net::HTTP.new(domain, 443) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

def request_wrapper(http, request) 
    retry_count = 5 
    begin 
    return http.request(request) 
    rescue Exception => e 
    retry_count-- 
    if retry_count < 0 
     raise e 
    end 
    retry 
end 



for i in 0..500 do 
    request = Net::HTTP::Get.new('https://' + domain + path) 
    response = request_wrapper(http, request) 
end 

的代碼將工作一段時間,但總免不了報告如下:

rescue in request_wrapper': undefined method - @」的零:NilClass (NoMethodError)

沒有人見過這個未定義的方法' - @'之前?再一次,這種情況非常間歇性地發生,但它是我身邊真正的刺。它總是指向我調用請求包裝器的代碼中的行。

感謝您的關注。

回答

3

問題出在線retry_count--。只有當失敗的HTTP請求引發Exception時,纔會對此行進行評估,這可以解釋爲什麼它會間歇性地發生。

Ruby沒有一元遞減(--)或增量(++)運算符。馬茨已經概述了這個here背後的哲學原因。另請參閱this threadthis one以獲取更多信息。

相反,retry_count -= 1應該做的工作。

+0

完全正確!謝謝! – ToneLoc 2012-03-15 17:13:01