Rails - 从另一个进程启动后台进程(Resque)

时间:2012-05-02 16:59:26

标签: ruby-on-rails background-process resque

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

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

1 个答案:

答案 0 :(得分: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不能。{/ p>