Активный вызов записи Resque caching

93
15

У меня есть простое задание 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 кэшированием объекта? Есть ли способ обеспечить его повторную загрузку из базы данных при каждом вызове рабочего?

спросил(а) 2012-04-03T17:41:00+04:00 8 лет, 6 месяцев назад
1
Решение
71

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


Затем рабочий выглядел бы так:

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

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

ответил(а) 2013-11-13T21:56:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема