2012-03-13 30 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