【问题标题】:Rails - starting background process (Resque) from another processRails - 从另一个进程启动后台进程(Resque)
【发布时间】:2012-05-12 04:47:39
【问题描述】:

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

【问题讨论】:

  • 你拼错了 enqueue。
  • 谢谢,已修复,原来的代码不是这样的。

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


【解决方案1】:

根本问题是一个错字。而不是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 2012-07-25
    • 2016-02-23
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多