2012-10-03 110 views
0

我使用下面的延遲的方法在我的控制器創建一個延遲的工作中創建新的工作:軌道延遲工作

JobProcessor.delay(:run_at => Time.now).process_job(options) 

現在process_job方法裏面我做

chunks = options[:collection].each_splice(10).to_a 
chunks.each do |chunk| 
    self.delay(:run_at => Time.now).chunk_job 
end 

當我向URL發送請求時,這給我錯誤stack level too deep

可能是什麼問題?請幫忙。

+0

當您嘗試運行代碼而沒有調用延遲時會發生什麼?我想你可能會得到相同的'堆棧級別太深'的錯誤,這通常意味着你的代碼中有一個無限循環。沒有額外的上下文就很難給出進一步的具體見解。我會打開控制檯並深入分塊......(它是否按照你期望的那樣做?)另外,chunk_job方法可能會發生問題。 –

+0

我做了一些改變,它爲我工作。 @AngeloChrysoulakis代碼中沒有無限循環,因爲它沒有'delay'調用。我無法弄清楚實際問題是什麼,但現在它爲我工作。 – Rohit

回答

1

我能夠通過做一些改變使它適用於我。

  • 我改變外方法process_job是一個實例方法
  • 並保持代碼的其餘部分,因爲它是。

所以現在我的代碼看起來像

JobProcessor.new.process_job(options) 

控制器,以及JobProcessor類裏面我有

class JobProcessor 
    def process_job(options) 
    chunks = options[:collection].each_splice(10).to_a 
    chunks.each do |chunk| 
     self.class.delay(:run_at => Time.now).chunk_job(options) 
    end 
    end 
    handle_asynchronously :process_job, :run_at => Proc.new { 2.seconds.from_now } 

    def self.chunk_job(options) 
    # perform chunk job here 
    end 
end 

這對我的作品。

+0

謝謝,有同樣的問題,您的解決方案工作。 – futureshocked