Работник Rails не запрашивает актуальную модель Active Record - PullRequest
0 голосов
/ 03 марта 2020

У меня есть работник, который создает запись в ActiveRecord, используя следующий синтаксис:

unique_id = SecureRandom.hex(32)
user = User.find(10)
user.tasks.build(tk: unique_id, completed: false).save

Однако, далее, у меня есть оператор, который должен отслеживать запись, чтобы увидеть, если что-то меняется, с следующее:

while !Task.find_by(tk: unique_id, completed: false).nil?
   sleep 5
end

Эта запись управляется фоновым работником и в конечном итоге помечает completed как true.

Однако это никогда не заканчивается, поскольку кажется, что completed атрибут всегда ложь, даже если я go в базу данных, чтобы увидеть, что это не так. Это как бы какой-то тип кеширования. Как видно на рисунке ниже, первая команда показывает, что идентификатор записи 19 имеет атрибут completed, равный true; однако второй (который используется в работнике) показывает, что это не так.

example

Как отключить кэширование в моих работниках, чтобы он всегда извлекает самую свежую информацию из базы данных?

1 Ответ

0 голосов
/ 03 марта 2020

Решено, используя .reload на самой записи. Например:

data = user.tasks.build(tk: unique_id, completed: false)
data.save

и когда мне нужно увидеть обновленные значения, я просто позвонил:

data.reload
if data.completed == true
   break
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...