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.6 和 activejob 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 设置默认队列?