Resque кеширует активную запись вызова - PullRequest
4 голосов
/ 03 апреля 2012

У меня есть простое задание resque, которое принимает идентификатор модели, выбирает его, а затем вызывает метод для выбранного элемента.

class CupcakeWorker
  @queue = :cupcake_queue
  def self.perform(cupcake_id)
    @cupcake = Cupcake.find(cupcake_id)
    @cupcake.bake
  end
end

Я ставлю его в очередь из действия контроллера, используя метод 'enqueue'

def bake
  Resque.enqueue(CupcakeWorker, params[:cupcake_id])
  render :json => 'Baking...'
end

Задание ставится в очередь и выполняется правильно. Однако, если я изменю данные записи в базе данных и продолжу ставить задание в очередь, операция не будет выполняться с использованием новых значений.

Я могу получить его только для извлечения новых значений, если перезапущу рабочий процесс resque. Resque кеширует объект? Есть ли способ обеспечить его повторное получение из базы данных каждый раз, когда вызывается работник?

1 Ответ

0 голосов
/ 13 ноября 2013

Этот ответ немного грубоват, но может сработать.Вы можете вызвать reload для модели ActiveRecord перед выполнением какой-либо обработки.Это заставляет ActiveRecord обновлять данные.

Рабочий будет выглядеть так:

class CupcakeWorker
  @queue = :cupcake_queue
  def self.perform(cupcake_id)
    @cupcake = Cupcake.find(cupcake_id).reload
    @cupcake.bake
  end
end

Однако, боюсь, я не знаю, почему Resque может делать это.Попробуйте Sidekiq и посмотрите, получите ли вы лучшие результаты.

...