Rails 6 ActiveJob неопределенная константа ActionMailer :: MailDeliveryJob - PullRequest
3 голосов
/ 09 октября 2019

Я обновляю приложение до Rails 6, и после исправления всех критических изменений я теперь сталкиваюсь с ошибкой при отправке писем из фоновых заданий.

Я использую Sidekiq через ActiveJob и считаю, что добавилнеобходимые изменения конфигурации:

# config/application.rb

...

config.load_defaults 6.0

# config/initializers/new_framework_defaults_6_0.rb

...

Rails.application.config.action_mailer.delivery_job = "ActionMailer::MailDeliveryJob"

Я отправляю электронные письма, используя deliver_later, например: UserMailer.notify(user).deliver_later

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

Сообщение об ошибке:

NameError:
uninitialized constant ActionMailer::MailDeliveryJob
Did you mean?  ActionMailer::DeliveryJob

В соответствии с Rollbar контекст ошибки: ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper

Любая помощьценится, спасибо!

1 Ответ

2 голосов
/ 09 октября 2019

ActionMailer::MailDeliveryJob является новым для рельсов 6, ранее он назывался ActionMailer::DeliveryJob (и все еще присутствует в рельсах 6, но с предупреждением об устаревании для более плавной миграции)

Похоже, у вас есть ситуация, когда задания изновые рельсы закончились рабочим sidekiq, который все еще работает в предыдущей версии. Поскольку электронные письма действительно доставляются - скорее всего, у вас есть работники с обеими версиями rails одновременно. Некоторые работники генерируют ошибку, и задание повторяется до тех пор, пока оно не будет выбрано работником, который наконец доставит.

Чтобы предотвратить ошибку, лучше развернуть ее с помощью action_mailer.delivery_job = "ActionMailer::DeliveryJob", убедитесь, что все работники обновлены (= перезапущены с новымкод) и только после этого снимите предупреждение об устаревании, переключившись на MailDeliveryJob.

...