Ruby on rails Rails作业和Sidekiq
我刚在我的应用程序上安装了redis和sidekiq 我的任务是在调用时更新用户表上的字段 以及每周向所有用户发送一次电子邮件的作业 现在,如果我使用Ruby on rails Rails作业和Sidekiq,ruby-on-rails,sidekiq,Ruby On Rails,Sidekiq,我刚在我的应用程序上安装了redis和sidekiq 我的任务是在调用时更新用户表上的字段 以及每周向所有用户发送一次电子邮件的作业 现在,如果我使用bundle exec sidekiq启动sidekiq,更新用户字段的作业将启动并完成,但电子邮件作业将保留在排队部分 但是如果我使用我从sidekiq github页面获得的bundle exec sidekiq-q workers-q mailers启动它,那么只有邮件作业完成,其他作业留在排队部分 是否有可以同时运行这两个命令?我昨天才开始
bundle exec sidekiq
启动sidekiq,更新用户字段的作业将启动并完成,但电子邮件作业将保留在排队部分
但是如果我使用我从sidekiq github页面获得的bundle exec sidekiq-q workers-q mailers
启动它,那么只有邮件作业完成,其他作业留在排队部分
是否有可以同时运行这两个命令?我昨天才开始了解sidekiq和redis很抱歉如果这是个愚蠢的问题
我在application.rb中将activejob.que_adapter
设置为sidekiq
以下是我如何设置用户作业的sidekiq worker:
class DeactivateUser
include Sidekiq::Worker
def perform
User.active.update_all(active: false)
end
end
谢谢。使用队列列表创建
config/sidekiq.yml
,然后运行sidekiq-C config/sidekiq.yml
#config/sidekiq.yml
---
:concurrency: 5
:queues:
- default
- mailers
- orders
按照Oskar的配置,采用相同的方法,让多个队列由single sidekiq进程处理。此外,还必须在工作文件中提到队列名称。这样sidekiq进程将从该队列的redis获取作业。例如:(
sidekiq_选项队列::邮递员
)
class WORKER\u名称
包括Sidekiq::Worker
sidekiq_选项队列::
def执行
... # 你的作品
结束
结束
如果您只想启动进程,只监听一个队列的邮件,并且并发性为10,请这样启动
bundle exec sidekiq-c 10-c config/myapp_sidekiq.yml-q mailers-q queue1-q queue2
这将侦听总共3个队列,分别名为
mailers
,queue1
,queue2
。这就是你必须开始sidekiq的方式。有关更多文档,请参见。问题可能是您没有将“默认”列为要处理的队列。您好@MikePerham,谢谢您的回复,我是否还需要为邮件程序作业列出“邮件程序”队列?奇怪的是,几天前,我刚刚看了你在sidekiq上的一场演讲,你居然回复了我!您需要列出要处理的队列。我只想将所有作业发送到默认状态,为什么要添加额外的队列?您好,谢谢您的回复!因此,当运行此命令时,bundle exec sidekiq-c 10-c config/myapp_sidekiq.yml-q mailers-q queue1-q queue2
这将告诉sidekiq在redis上的队列“mailers”“queue1”和“queue2”中查找作业,对吗?这个命令-C10表示一次要运行多少个作业?如果我没有完全理解这个-c10
是并发性,请再次表示感谢和抱歉。要运行多少线程。没有多少工作。虽然相同,但含义不同。请接受某人的答案,以便其他人知道解决方案是正确的。
class WORKER_NAME
include Sidekiq::Worker
sidekiq_options queue: :<queue_name>
def perform
... # your work
end
end