nao*_*nao 3 ruby-on-rails actionmailer ruby-on-rails-5
我有一个非常基本的邮件程序设置,如下所示来发送交易邮件程序:
class PayoutMailer < ApplicationMailer
default from: 'hello@groundworkai.com'
def payout_success_email(email, payment_size, user_name)
@payment_size = payment_size
@user_name = user_name
subject = 'Your Rewards Have Been Sent!'
mail(to: email, from: 'hello@myservice.com', subject: subject)
end
end
Run Code Online (Sandbox Code Playgroud)
我正在用这条线测试:
PayoutMailer.payout_success_email('test@example.com',
200000,
'test name').deliver_later
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我使用 .deliver 或 .deliver_now 时,邮件会发送,但是当我使用 delivery_later 异步委托它时,它会排队但永远不会发送。输出是:
I, [2018-01-20T15:27:44.140104 #4] INFO -- : [ActiveJob] Enqueued ActionMailer::DeliveryJob (Job ID: 265cb31a-dec4-4adb-866d-06e44645c53a) to Async(mailers) with arguments: "PayoutMailer", "payout_success_email", "deliver_now", "test@example.com", 200000, "test name"
Run Code Online (Sandbox Code Playgroud)
我知道 ActionJob 在我使用 Deliver_later 时正在处理它,根据文档:
Active Job 的默认行为是通过 :async 适配器执行作业。因此,您现在可以使用 delivery_later 异步发送电子邮件。Active Job 的默认适配器使用进程内线程池运行作业。它非常适合开发/测试环境,因为它不需要任何外部基础设施,但它不适合生产,因为它会在重新启动时丢弃挂起的作业。如果您需要持久后端,则需要使用具有持久后端(Sidekiq、Resque 等)的 Active Job 适配器。
在这一点上,我不需要持久的后端,使用进程内线程池就可以了。有没有什么办法让我在不引入Sidekiq + Redis的外部基础设施的情况下使用deliver_later?
异步适配器无法从 rake 任务中工作。
尝试内联,或使用 delivery_now
来自 http://edgeguides.rubyonrails.org/active_job_basics.html#job-execution
使用来自 Rake 任务的异步队列(例如,使用 .deliver_later 发送电子邮件)通常不起作用,因为 Rake 可能会在任何/所有 .deliver_later 电子邮件之前结束,导致进程内线程池被删除被处理。为避免此问题,请使用 .deliver_now 或在开发中运行持久队列。
| 归档时间: |
|
| 查看次数: |
4835 次 |
| 最近记录: |