【问题标题】:deliver_later not working good in rails tasksDeliver_later 在 Rails 任务中效果不佳
【发布时间】:2018-03-31 16:06:21
【问题描述】:

我正在使用任务来完成后台作业。例如我在 lib/tasks 中的 remove_badges.rake 文件:

desc "Remove expired badges rake task"
task :remove_expired_badges => :environment do

  message = "remove_expired_badges is running now."
  HostMailer.send_system_info_mail(message).deliver_later

  BadgeHost.all.each do |b|
    if b.expire_at < Time.now
      begin
        b.destroy
        puts "An expired badge successfully deleted."

        host = b.host
        badge = b.badge
        HostMailer.send_badge_removed_email(host, badge).deliver_later

      rescue
        puts "Failed to destroy expired badge."
      end
    end
  end
end

第一封邮件是给我自己的,以确保此任务正在运行。 第二封邮件是给用户通知他丢失了他的徽章。

我还有其他任务,其中一个邮件工作正常。

但在其他任务中,不会发送邮件。只有当我删除deliver_later 并使用deliver 时,才会发送邮件。

我不想使用传递,因为它会暂停直到邮件发送。

您知道有什么原因导致 Deliver_later 不能很好地处理 Rails 任务吗?

【问题讨论】:

  • 不知道,我也遇到了同样的情况,使用 Deliver_now 作为临时解决方案。

标签: ruby-on-rails task actionmailer rails-activejob


【解决方案1】:

我只是在发送电子邮件的 Rails 5.0.1 应用程序中处理 rake 任务。我正在使用 ActiveJob 的 :async 适配器的默认设置(开发模式)。我还在开发中使用 letter_opener gem,以便电子邮件会在我的浏览器中弹出而不是发送。

当我使用 .deliver_now 对每封电子邮件运行任务时,一切看起来都很好。

为了让任务快速完成,我切换了 rake 任务,使其生成的每封电子邮件都使用 .deliver_later 而不是 .deliver_now 排队。

我可以看到 ActiveJob 将电子邮件排入队列:

[ActiveJob] 排队的 ActionMailer::DeliveryJob ...

但是开信器中没有弹出电子邮件。

事实证明,问题在于我不明白 :async 是如何工作的。基本上,发生的事情是 :async 是一个内存队列,只要创建它的进程存在,它就会持续存在。使用 rake 任务,电子邮件被正确地排入队列(在内存中),但随后任务结束并且内存队列被清除。但这发生在给 ActiveJob 线程任何处理时间之前。

要测试开发中的事情是否正常,以下任何一项都可以工作:

Use .deliver_now
Add a sleep(5) to the end of your rake task (just for manual testing ... delete that before you commit)
Switch to a different ActiveJob adapter that stores the jobs in some durable queue / db and runs as a separate process from your rake task

回答来自:http://stevechanin.blogspot.com/2017/05/deliverlater-not-working-in-rake-tasks.html

【讨论】:

    猜你喜欢
    • 2016-02-15
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多