Rails DeliveryJob弃用警告:如何升级到MailDeliveryJob?



我有一个控制器动作,用于排队发送电子邮件。我为控制器动作写了一个测试,当我运行测试时,我得到了一个弃用警告:

DEPRECATION WARNING:发送带有DeliveryJob和的邮件Parameterized::DeliveryJob已弃用,将在Rails中删除6.1. 请使用MailDeliveryJob。

控制器:

def send_email
SubscriptionMailer.with(user_id: @user.id).send_welcome_email.deliver_later
end

SubscriptionMailer:

class SubscriptionMailer < ApplicationMailer
helper :auxiliaries
before_action { @user = User.find_by(id: params[:user_id]) }
def send_welcome_email
@base_email = find_base_email_or_raise("welcome_email")
@subject = "#{@user.fname} #{@base_email.subject}"
send_email(subject: @subject)
end
end

测试:

test "#send_email should enqueue SubscriptionMailer's #send_welcome_email" do
assert_emails 1 do
get send_email_admin_subscriptions_activation_path(
@user.id,
)
end
end

我如何升级我的应用程序来摆脱警告?

我在不同的帖子中读到关于取消评论new_framework_defaults_6_0.rb的一行,但这并没有解决问题。

要修复弃用警告,请将这一行添加到application.rb:

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

来源:https://github.com/rails/rails/issues/37068 issuecomment - 545531362

问:这是否会影响电子邮件的发送方式?

方法的参数已经改变:

# DeliveryJob
def perform(mailer, mail_method, delivery_method, *args)
# MailDeliveryJob
def perform(mailer, mail_method, delivery_method, args:, params: nil)

所以你可能必须在合适的地方改变方法调用中的参数。

您可以在此PR中找到更多详细信息:https://github.com/rails/rails/pull/34591

最新更新