【发布时间】:2021-06-14 04:14:46
【问题描述】:
我正在关注https://guides.rubyonrails.org/action_mailer_basics.html#calling-the-mailer 上的 Action Mailer 指南
我做了几乎相同的教程展示。控制器:
def create
@user = User.create(user_params)
if @user && UserMailer.with(user: @user).welcome_email.deliver_later
token = encode_token({ user_id: @user.id })
render json: { token: token }, status: :created
else
render json: @user.errors.messages, status: :bad_request
end
end
邮递员:
class UserMailer < ApplicationMailer
default from: 'notifications@example.com'
def welcome_email
@user = params[:user]
@url = 'http://example.com/login'
mail(to: @user.email, subject: 'Welcome to My Awesome Site')
end
end
但是当我提出请求时,Active Job 大喊:
ActiveJob::SerializationError => "Unsupported argument type: User"
使用deliver_now可以正常工作
这表明我们的:async 适配器有问题。但正如指南所说:
Active Job 的默认行为是通过 :async 适配器执行作业。因此,您可以使用 Deliver_later 异步发送电子邮件。 Active Job 的默认适配器使用进程内线程池运行作业。它非常适合开发/测试环境,因为它不需要任何外部基础设施,但它不适合生产,因为它会在重启时丢弃待处理的作业。如果您需要持久后端,则需要使用具有持久后端(Sidekiq、Resque 等)的 Active Job 适配器。
那么我在这里缺少什么?
【问题讨论】:
-
你也可以分享你的方法代码吗?
-
你说的邮递员?
-
是的..顺便说一句,如果您可以在代码
with(user_id: @user.id)中传递 id 并在邮件方法中找到用户,如@user = User.find(params[:user_id]),它将起作用。试着告诉我。 -
它没有用。现在产生的错误是:“不支持的参数类型:BSON::ObjectId”
-
太好了!坚持下去..
标签: ruby actionmailer ruby-on-rails-6 rails-activejob