Мы пытаемся использовать Delay::Job
для обработки некоторых фоновых функций определенного времени.
В то время как в разработке все хорошо (локальный компьютер), рабочий на производстве, похоже, не отрабатывает задания.
В журналах видно, что работник работает, но, кажется, никогда не выбирает и не блокирует задание, которое будет запускать работник.
Похоже, что задания правильно ставятся в очередь, и при вызове вручную через консоль Delayed::Job.find(1).invoke_job
они запускают свои методы, как и ожидалось.
Рабочий, вызванный в Procfile с worker: rake jobs:work
, кажется работоспособным, но, кажется, никогда не выбирает работу для отработки.
Какой ключевой шаг мне не хватает?
Может ли быть проблема с TimeZone? Я пытался использовать другое время даты.
Даже запуск поиска SQL из рабочего файла журнала:
\SELECT "delayed_jobs"."id" FROM "delayed_jobs" WHERE ((run_at <= '2019-05-08 01:29:13.843987' AND (locked_at IS NULL OR locked_at < '2019-05-07 21:29:13.844084')AND failed_at IS NULL) AND "delayed_jobs"."queue" = '*' ORDER BY priority ASC, run_at ASC LIMIT 1)
возвращает действительный набор идентификаторов, который, я считаю, должен работать.
Спасибо за вашу помощь.