ActiveJob Deliver_later 不发送

Posted

技术标签:

【中文标题】ActiveJob Deliver_later 不发送【英文标题】:ActiveJob deliver_later not sending 【发布时间】:2016-10-18 17:21:57 【问题描述】:

我有以下方法:

UserMailer.comment_alert(@comment, user, type).deliver_later

这奇怪地出现在 rails 日志中的参数 deliver_now

[ActiveJob] Enqueued ActionMailer::DeliveryJob (Job ID: 5bdf9ed1-53d5-42aa-acb2-7ce54ab284e1) to Sidekiq(mailers) with arguments: "UserMailer", "comment_alert", "deliver_now", gid://xxx/Comment/153, gid://xxx/User/26, "Comment"

作业从不处理,我在 Sidekiq 日志中看不到任何内容。也没有邮件送达,永远。我尝试重新启动sidekiq、rails和redis,甚至清除redis db。有趣的是更改为.deliver_now 有效,但这似乎并没有触及sidekiq 或创建Enqueued ActionMailer::DeliveryJob

在我的 application.rb 中:

config.active_job.queue_adapter = :sidekiq

我正在使用 rails 4.2.6activejob 4.2.6

【问题讨论】:

【参考方案1】:

邮件在队列邮件中排队。记得启动 sidekiq 处理该队列:

bundle exec sidekiq -q default -q mailers

或者添加config/sidekiq.yml,内容如下

  :verbose: true
  :concurrency: 25
  :queues:
    - [mailers, 7]
    - [default, 5]

然后运行bundle exec sidekiq -C config/sidekiq.yml

【讨论】:

感谢您为我解决了这个问题。 这个 -q default -q mailers 在 2017 年对我有帮助。Sidekiq 5.0.5,Rails 5.1.4。谢谢! 肯尼谢谢你!很棒的答案,经过几天的挫折,把这个从盘子里拿出来了。谁知道你必须要求你的新车配备***...... 如果您将配置放在config/sidekiq.yml,则不需要将其传递给bundle exec sidekiq 这在分支上工作,但现在它合并到开发分支,它突然停止工作。有什么想法吗?【参考方案2】:

如果您正在使用 sidekiq,请不要稍后使用 Deliver,因为该作业永远不会执行,而是使用 perform_in() 并调用带有 Deliver_now 的工作人员

【讨论】:

以上是关于ActiveJob Deliver_later 不发送的主要内容,如果未能解决你的问题,请参考以下文章

Action Job/Mailer 的 `deliver_now` 和 `deliver_later` 之间的区别

Rails 6 & Deliver_later 不影响 ActionMailer::Base.deliveries

ActiveJob::SerializationError - 不支持的参数类型:时间/日期时间

为 ActionMailer Deliver_later 设置默认队列?

Rails 4.2:将 Deliver_later 与无表模型一起使用

Rails 5:ActionMailer 的“deliver_later”永远不会在生产中交付