Ruby on rails Rails 6 ActiveJob未定义常量ActionMailer::MailDeliveryJob

Ruby on rails Rails 6 ActiveJob未定义常量ActionMailer::MailDeliveryJob,ruby-on-rails,actionmailer,sidekiq,rails-activejob,ruby-on-rails-6,Ruby On Rails,Actionmailer,Sidekiq,Rails Activejob,Ruby On Rails 6,我正在将一个应用程序升级到Rails 6,在修复了所有破坏性的更改后,我现在在从后台工作发送电子邮件时遇到了一个错误 我通过ActiveJob使用Sidekiq,我相信我已经添加了必要的配置更改: # config/application.rb ... config.load_defaults 6.0 我使用deliver\u later发送电子邮件,例如:UserMailer.notify(user.deliver\u later 一个重要方面是,即使我收到了错误,邮件仍在发送中 错误

我正在将一个应用程序升级到Rails 6,在修复了所有破坏性的更改后,我现在在从后台工作发送电子邮件时遇到了一个错误

我通过ActiveJob使用Sidekiq,我相信我已经添加了必要的配置更改:

# config/application.rb

...

config.load_defaults 6.0

我使用
deliver\u later
发送电子邮件,例如:
UserMailer.notify(user.deliver\u later

一个重要方面是,即使我收到了错误,邮件仍在发送中

错误消息:

NameError:
uninitialized constant ActionMailer::MailDeliveryJob
Did you mean?  ActionMailer::DeliveryJob
根据Rollbar,错误的上下文是
ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper


感谢您的帮助,谢谢

ActionMailer::MailDeliveryJob
是rails 6的新功能,以前它被称为
ActionMailer::DeliveryJob
(它仍然存在于rails 6中,但带有弃用警告,以便更平滑地迁移)

看起来您遇到了这样一种情况:来自新rails的作业最终出现在仍在运行旧版本的sidekiq worker中。 由于电子邮件实际上是在发送的——很可能您的工作人员同时使用两个rails版本。某些工作人员生成错误,并重试作业,直到最终交付的工作人员拾取该作业为止


为了防止错误,最好使用
action\u mailer.delivery\u job=“ActionMailer::DeliveryJob”
进行部署,确保所有工作人员都已升级(=使用新代码重新启动),然后通过切换到
maildiveryjob
删除弃用警告。您是正确的!为了解决这个问题,我部署了新代码,并使用
ps-aux
查找旧的Sidekiq进程,在找到并杀死一个旧进程之后,一切都开始正常工作。谢谢
NameError:
uninitialized constant ActionMailer::MailDeliveryJob
Did you mean?  ActionMailer::DeliveryJob