Я исправил эту проблему, переключившись на delayed_job (DJ) версии 2.1.2.
Я использую:
РВМ
ruby 1.8.7 (уровень обновления 24-01 2010-10)
рельсы 3.0.9
Gemfile:
gem "delayed_job", '2.1.2'
До этого я пытался использовать последнюю версию delayed_job:
gem "delayed_job",: git => 'git: //github.com/collectiveidea/delayed_job.git'
для меня это был v3.0.0.pre
Но:
рельсы генерируют delayed_job
не генерирует файл миграции. Я создал это вручную. Затем после 'rake db: migrate' у меня есть таблица для хранения очереди delayed_job. А потом, когда я подумал, что все должно работать правильно, я получил ту же ошибку.
Когда я пытался найти источник этой ошибки, в таблице 'delayed_jobs' я обнаружил, что задачи delayed_job неправильно сохранены. Вот фрагмент из поля 'handler' в таблице 'delayed_jobs':
--- !ruby/object:Delayed::PerformableMailer
object: !ruby/class Notifier
Как я знаю, delayed_job получает все задачи через класс Struct, поэтому задача должна быть сохранена с заголовком '! Ruby / struct' вместо '! Ruby / object'
Вот фрагмент правильно сохраненного задания:
--- !ruby/struct:Delayed::PerformableMailer
object: !ruby/class Notifier
Чтобы проверить это, я остановил процесс delaed_job в консоли. Затем я вызвал какой-то метод для помещения задачи диджея в БД:
Notifier.delay.some_email(current_user, @event_message)
Затем я вручную заменил «! Ruby / object» на «! Ruby / struct» в поле «handler».
Затем я начал работать с ди-джеем «Rake Job: Work», и мне сказали, что почта успешно отправлена.
Но:
- это задание не было удалено из таблицы диджея
- и почта не доходит до получателя
Итак, я решил, что это ошибка в новой версии delayed_job. Я переключился на ди-джея «2.1.2», и он отлично сработал.
P.S .: Извините за мой английский:)