Rails 6 ActiveJob 未定义常量ActionMailer::MailDeliveryJob
Rails 6 ActiveJob undefined constant ActionMailer::MailDeliveryJob
我正在将应用程序升级到 Rails 6,在修复所有重大更改后,我现在在从后台作业发送电子邮件时遇到错误。
我通过 ActiveJob 使用 Sidekiq,我相信我已经添加了必要的配置更改:
# 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
感谢任何帮助,谢谢!
ActionMailer::MailDeliveryJob
是 rails 6 的新功能,之前它被称为 ActionMailer::DeliveryJob
(并且仍然存在于 rails 6 中,但带有弃用警告以实现更顺畅的迁移)
看起来你遇到的情况是,来自新 rails 的作业最终出现在仍然是 运行 以前版本的 sidekiq worker 中。
由于实际上是在发送电子邮件 - 很可能您的工作人员同时使用两个 rails 版本。一些工作人员生成错误,工作将被重试,直到它被最终交付的工作人员挑选。
为防止错误,最好使用 action_mailer.delivery_job = "ActionMailer::DeliveryJob"
进行部署,确保所有 worker 都已升级(=使用新代码重新启动),然后才通过切换到 MailDeliveryJob
来移除弃用警告。
我正在将应用程序升级到 Rails 6,在修复所有重大更改后,我现在在从后台作业发送电子邮件时遇到错误。
我通过 ActiveJob 使用 Sidekiq,我相信我已经添加了必要的配置更改:
# 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
感谢任何帮助,谢谢!
ActionMailer::MailDeliveryJob
是 rails 6 的新功能,之前它被称为 ActionMailer::DeliveryJob
(并且仍然存在于 rails 6 中,但带有弃用警告以实现更顺畅的迁移)
看起来你遇到的情况是,来自新 rails 的作业最终出现在仍然是 运行 以前版本的 sidekiq worker 中。 由于实际上是在发送电子邮件 - 很可能您的工作人员同时使用两个 rails 版本。一些工作人员生成错误,工作将被重试,直到它被最终交付的工作人员挑选。
为防止错误,最好使用 action_mailer.delivery_job = "ActionMailer::DeliveryJob"
进行部署,确保所有 worker 都已升级(=使用新代码重新启动),然后才通过切换到 MailDeliveryJob
来移除弃用警告。