ActiveJob的deliver_later方法没有发送任务

8
我有以下方法:

我有以下方法:

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数据库。有趣的是,切换到.deliver_now可以工作,但这似乎没有涉及到Sidekiq或创建一个Enqueued ActionMailer :: DeliveryJob
在我的application.rb文件中:
config.active_job.queue_adapter = :sidekiq

我正在使用rails 4.2.6activejob 4.2.6
2个回答

25

邮件将被排队在mailer的队列中。请记得启动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


谢谢你为我解决了那个问题。 - Abram
{btsdaf} - Sergio Belevskij
Kenny,谢谢你!非常棒的答案,让我在几天的挣扎后解决了这个问题。谁知道你还需要要求新车配备轮子... - Nick M
如果您将配置文件放在 config/sidekiq.yml,则不需要将其传递给 bundle exec sidekiq - Mark Fraser
这在分支上可以运行,但现在它已经合并到开发分支,突然停止工作了。有什么想法吗? - Monroe Mann

-3
如果您正在使用Sidekiq,请不要使用deliver_later,因为作业永远不会执行。相反,请使用perform_in(<>)并在其中调用一个带有deliver_now的worker。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接