2012-05-02 5 views
0

バックグラウンドプロセスにResqueを使用するアプリケーションがあります。だから私はRails - 別のプロセスからバックグラウンドプロセスを開始する(Resque)

-/app/workers/dataCollector.rb 

とコントローラにあります:

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

私はいくつかの点でデータ・コレクターからいくつかの情報を取得し、それを処理することを別のワーカーを追加します。

ので、私が試した:

-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 

深い "

私はresque Webインターフェイスでprocessing_queueを見ることが

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

、決してで...ローカルに一度プログラムを実行しました。

+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ができないことです。