Rails - запуск фонового процесса (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

и никогда не увидеть processing_queue в веб-интерфейсе восстановления.


person Stpn    schedule 02.05.2012    source источник
comment
Вы неправильно написали enqueue.   -  person Erik Petersen    schedule 02.05.2012
comment
спасибо, исправлено, в исходном коде этого не было.   -  person Stpn    schedule 02.05.2012


Ответы (1)


Основная проблема - опечатка. Вместо того:

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

Я думаю, вы имеете в виду:

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

Тогда причина, по которой вы видите сообщение «Уровень стека слишком глубокий», заключается в том, что Resque вакансии могут принимать только аргументы, которые могут быть закодированы в JSON, и предположительно data не могут быть.

person Derek Hill    schedule 29.06.2013