0

我有一个将 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

产生的错误是“堆栈级别太深”</p>

我在本地运行了一次程序......

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

并且永远不会在 resque Web 界面中看到 processing_queue。

4

1 回答 1

0

根本问题是一个错字。代替:

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

我想你的意思是:

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

那么您看到消息“堆栈级别太深”的原因是Resque 作业只能接受可以 JSON 编码的参数,并且可能data不能。

于 2013-06-29T09:20:15.193 回答