我有一个脚本调用facebook test api来自动创建测试帐户。在看似随机的时间间隔内,从50个请求到6000个请求,我得到一个未捕获的异常。我对如何弄清楚错误是什么感到茫然,所以我将从这里开始使用相关代码。
我没有使用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
- @'中为nil:NilClass (NoMethodError)
以前有人见过这种未定义的方法' - @'吗?再一次,这种情况非常间歇性地发生,但它在我身边真的是一种刺。它始终指向我调用请求包装器的代码中的行。
谢谢你看看。
答案 0 :(得分:3)
问题在于行retry_count--
。仅当失败的HTTP请求引发Exception
时才会评估此行,这解释了为什么它会间歇性地发生。
Ruby没有一元递减(--
)或递增(++
)运算符。 Matz概述了here背后的哲学原因。另请参阅this thread和this one以获取更多信息。
相反,retry_count -= 1
应该完成这项工作。