Ruby on rails Rails 6 ActiveJob未定义常量ActionMailer::MailDeliveryJob
我正在将一个应用程序升级到Rails 6,在修复了所有破坏性的更改后,我现在在从后台工作发送电子邮件时遇到了一个错误 我通过ActiveJob使用Sidekiq,我相信我已经添加了必要的配置更改: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 一个重要方面是,即使我收到了错误,邮件仍在发送中 错误
# 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