首页 > 解决方案 > Rails/Sidekiq/Devise:这项工作是由 Sidekiq 处理的吗?我怎么能确定?

问题描述

我已将设计设置为异步发送电子邮件,如下所示:

class User < ApplicationRecord
  ...

  def send_devise_notification(notification, *args)
    DeviseMailerJob.perform_now(devise_mailer, notification, id, *args)
  end
end

class DeviseMailerJob < ApplicationJob
  queue_as :mailers

  def perform(devise_mailer, method, user_id, *args)
    user = User.find(user_id)
    devise_mailer.send(method, user, *args).deliver_now
  end
end

我的sidekiq.yml样子是这样的:

---
:concurrency: 5
:queues:
  - mailers

我可以去注册页面,注册,我会在日志中看到一切正常:

2018-10-09T10:02:27.793848+00:00 app[web.1]: I,
[2018-10-09T10:02:27.793770 #4]  INFO -- :
[646a58f7-9588-4a1f-a258-9fbede3cf87d] [ActiveJob] [DeviseMailerJob]
[5ceac77e-d498-4436-8f12-7cd4aff2c004] Performed DeviseMailerJob (Job ID:
5ceac77e-d498-4436-8f12-7cd4aff2c004) from Sidekiq(mailers) in 3301.06ms

但该作业并未显示在 Sidekiq 仪表板中。但是,我确实收到了确认电子邮件。所以这项工作确实得到了处理。只是,我不能确定 Sidekiq 正在处理它。

查看 Heroku 日志,我看不到 Sidekiq 的任何日志。在仪表板上,我希望看到发送的每封电子邮件的“已处理”计数增量。我不确定如何对此进行调查。

使用 Heroku,查看工作是否由 Sidekiq 处理的最佳方式是什么?我的代码中是否有任何内容表明 Sidekiq 没有处理这项工作?

标签: ruby-on-railsdeviseruby-on-rails-5sidekiqrails-activejob

解决方案


您已经通过调用 perform_now 明确告诉代码立即执行:

DeviseMailerJob.perform_now

推荐阅读