代码之家  ›  专栏  ›  技术社区  ›  user3574603

Rails/Sidekiq/designe:工作是否由Sidekiq处理?我怎么确定?

  •  0
  • user3574603  · 技术社区  · 6 年前

    我设置了designe以异步方式发送电子邮件,如下所示:

    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
    

    对于Heroku来说,最好的方法是什么来判断Sidekiq是否在处理工作?我的代码中有没有任何东西表明Sidekiq没有处理这个任务?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mike Perham    6 年前

    您已经通过调用perform\u显式地告诉代码立即执行:

    DeviseMailerJob.perform_now