Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails作业和Sidekiq_Ruby On Rails_Sidekiq - Fatal编程技术网

Ruby on rails Rails作业和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启动它,那么只有邮件作业完成,其他作业留在排队部分 是否有可以同时运行这两个命令?我昨天才开始

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

我的任务是在调用时更新用户表上的字段

以及每周向所有用户发送一次电子邮件的作业

现在,如果我使用
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