Rails工作和Sidekiq

时间:2018-03-20 10:44:23

标签: ruby-on-rails sidekiq

我刚刚在我的应用上安装了redis和sidekiq,

我有一个工作是在调​​用时更新users表上的字段,

每周向所有用户发送一封电子邮件的工作。

现在,如果我使用bundle exec sidekiq启动sidekiq更新用户字段的作业将关闭并完成,但电子邮件作业将保留在已排队的部分中。

但是,如果我使用bundle exec sidekiq -q workers -q mailers启动它,我从Sidekiq github页面获得的只是邮件作业完成,其他人留在排队部分。

是否有命令可以同时运行?我昨天才开始了解sidekiq和redis,如果这是一个愚蠢的问题,那就很抱歉,

我在application.rb。

中将activejob.que_adaptar设置为sidekiq

这就是我的sidekiq工作人员如何设置用户工作:

class DeactivateUser
 include Sidekiq::Worker

  def perform
   User.active.update_all(active: false)
  end

end

感谢。

2 个答案:

答案 0 :(得分:1)

使用您的队列列表创建config/sidekiq.yml并运行sidekiq -C config/sidekiq.yml

    #config/sidekiq.yml

    ---
    :concurrency: 5
    :queues:
      - default
      - mailers
      - orders

答案 1 :(得分:1)

正如Oskar配置的那样,按照相同的方法让单个sidekiq进程处理多个队列。此外,您还必须在worker文件中提及队列名称。这样sidekiq进程将从该队列的redis获取作业。例如:(sidekiq_options queue: :mailers

class WORKER_NAME
  include Sidekiq::Worker
  sidekiq_options queue: :<queue_name>

   def perform
     ... # your work
   end
end

如果你想开始进程只监听一个队列邮件并具有并发性10,请从这样开始。

bundle exec sidekiq -c 10 -C config/myapp_sidekiq.yml -q mailers -q queue1 -q queue2

这将听取总共3个名为mailersqueue1queue2的队列。这就是你必须启动sidekiq的方法。有关更多文档,请refer to this