2012-03-13 6 views
2

テストアカウントの作成を自動化するためにfacebookテストAPIを呼び出すスクリプトがあります。一見無作為な間隔で、50リクエスト後から6000リクエストまで、捕捉されない例外が発生します。私はエラーが何であるか把握する方法を失っているので、ここで関連するコードから始めます。ルビーのnet/httpリクエストラッパーでキャッチされていない例外

facebookキーにruby 1.8.7のURI.parseを破るパイプ文字があるため、私はURIライブラリを使用していません。

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)今まで見

誰でもこの未定義のメソッド ' - @'の前に?繰り返しますが、これは非常に断続的に起こりますが、私の側には本当の棘でした。これは常に、要求ラッパーを呼び出すコードの行を指しています。

ありがとうございます。

答えて

3

問題は行retry_count--です。この行は、失敗したHTTP要求がExceptionを発行した場合にのみ評価され、断続的に発生する理由が説明されています。

Rubyには単項デクリメント(--)または増分(++)演算子はありません。 Matzはこのhereの背後にある哲学的理由を概説している。詳細については、this threadおよびthis oneも参照してください。

代わりに、retry_count -= 1がジョブを実行する必要があります。

+0

これはまさに正しいことでした。ありがとう! – ToneLoc

関連する問題