0

APIを継続的に呼び出していますが、呼び出しから数分以内にスタックレベルのエラーが多すぎます。私はここで基本的な何かが欠けていると思います:

Class SomeModel

  def self.call_api(index)
    ref = SomeModel.get_reference
    query ||=  Api.call(:parameter => ref.parameter, :offset => index)
    # .. doing stuff
    if index >= 949
      sleep(20)
      new_num = Integer(number) + 1000
      ref.update_attribute(:parameter, new_num)      
      SomeModel.call_api(1)
     else
       sleep(10)
       begin
             # This is a rescue for the case when API call returns nothing.
         SomeModel.call_api(index+50)
       rescue
         new_num = Integer(number) + 1000
         ref.update_attribute(:parameter, new_num)
         SomeModel.call_api(1)
       end
    end
  end

end
4

1 に答える 1

0

Rubyは再帰をうまく処理せず、最終的にはスタックレベルが深すぎます。これを、メソッドを再帰的に呼び出さないある種のループ内に配置することをお勧めします。無限ループでメソッドを呼び出すよりも少し賢くしたい場合は、EventMachineなどを使用してさまざまなイベントに応答できます。

于 2012-08-16T02:32:04.550 に答える