2012-05-02 82 views
0

我有一個使用Resque進行後臺進程的應用程序。所以,我有Rails - 從另一個進程啓動後臺進程(Resque)

-/app/workers/dataCollector.rb 

和控制器:

def new 
    @my_model = MyModel.new(params[:]) 
    Resque.enqueue(DataCollector, @my_model.id) 
end 

我想補充另一名工人在某個時候會得到dataCollector並處理一些信息。

所以我嘗試:

-app/workers/dataCollector.rb 
      /dataProcessor.rb 

,並曾在我爲MyModel類:

def my_function 
    ... 
    data.each do |d| 
     Resque.enqueue(DataProcessor, data) 
    end 
end 

我新的工作看起來像:

class DataProcessor 
    @queue = :processing_queue 
    def self.perform(data) 
    new_var = processingFunction(data) 
    newModel.column = new_var 
    end 
end 

產生的錯誤是「堆棧的水平太深「

我跑一次程序在本地...與

bundle exec env rake resque:work QUEUE='*' 
redis-server /usr/local/etc/redis.conf 

,並從來沒有看到processing_queue在resque Web界面。

+0

您拼寫錯誤。 –

+0

謝謝,修正,原來的代碼並非如此。 – Stpn

回答

0

根本問題是一個錯字。相反的:

data.each do |d| 
    Resque.enqueue(DataProcessor, data) 
end 

我想你的意思:

data.each do |d| 
    Resque.enqueue(DataProcessor, d) 
end 

然後,你所看到的消息「堆棧層次過深」的原因是Resque jobs can only accept arguments that can be JSON encoded,想必data不能。