Rails/Sidekiq/Devise: Sidekiq выполняет эту работу? Как я могу быть уверен?

Я настроил Devise на асинхронную отправку писем, например:

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?


person user3574603    schedule 09.10.2018    source источник
comment
Где ваш сотрудник Sidekiq?   -  person Maxence    schedule 09.10.2018
comment
На Героку. === worker (Free): bundle exec sidekiq (1) worker.1: up 2018/10/09 10:50:21 +0100 (~ 19m ago)   -  person user3574603    schedule 09.10.2018
comment
Нет, не ваш рабочий Heroku, а ваш рабочий Sidekiq. Sidekiq работает с объектами рабочего класса. Если вы не закодировали ни одного рабочего, возможно, ваше асинхронное задание не проходит через Sidekiq. github.com/mperham/sidekiq/wiki/Getting-Started   -  person Maxence    schedule 09.10.2018
comment
Нужно ли это, если я использую ActiveJob? config.active_job.queue_adapter = :sidekiq   -  person user3574603    schedule 09.10.2018
comment
Perform_now не является асинхронным   -  person Sergio Tulentsev    schedule 09.10.2018


Ответы (1)


Вы явно указали коду выполняться немедленно, вызвав Perform_now:

DeviseMailerJob.perform_now
person Mike Perham    schedule 09.10.2018