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 に答える