Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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 Sidekiq列出所有作业[排队运行]_Ruby On Rails_Ruby_Sidekiq - Fatal编程技术网

Ruby on rails Sidekiq列出所有作业[排队运行]

Ruby on rails Sidekiq列出所有作业[排队运行],ruby-on-rails,ruby,sidekiq,Ruby On Rails,Ruby,Sidekiq,是否有方法获取队列中当前正在运行的所有作业的列表?基本上,我想知道给定类的作业是否已经存在,我不想插入其他作业。我见过其他的选择,但我想这样做 我可以看到如何获取队列中的作业列表 queue = Sidekiq::Queue.new("mailer") queue.each do |job| job.klass # => 'MyWorker' end 据我所知,这不包括处理/运行作业。有没有办法获取它们?如果您想从控制台列出当前正在运行的所有作业,请尝试以下操作 workers =

是否有方法获取队列中当前正在运行的所有作业的列表?基本上,我想知道给定类的作业是否已经存在,我不想插入其他作业。我见过其他的选择,但我想这样做

我可以看到如何获取队列中的作业列表

queue = Sidekiq::Queue.new("mailer")
queue.each do |job|
  job.klass # => 'MyWorker'
end

据我所知,这不包括处理/运行作业。有没有办法获取它们?

如果您想从控制台列出当前正在运行的所有作业,请尝试以下操作

workers = Sidekiq::Workers.new
workers.each do |_process_id, _thread_id, work|
  p work
end
工作
是散列

列出所有队列数据

queues = Sidekiq::Queue.all
queues.each do |queue|
  queue.each do |job|
    p job.klass, job.args, job.jid
  end
end
对于特定队列,将其更改为
Sidekiq::queue.new('queue\u name')


类似地,您可以使用
Sidekiq::ScheduledSet.new

获取所有计划作业,假设您在排队时将散列作为参数传递给Sidekiq

args = {
  "student_id": 1,
  "student_name": "Michael Moore"
    }

YourWorker.perform_in(1.second,args)
然后,您可以在应用程序的任何位置检索它,如下所示

      ss = Sidekiq::ScheduledSet.new
      student_id_list = ss.map{|job| job['args'].first["student_id"]}
正在运行作业:

Sidekiq::Workers.new.each do|u进程_id、_线程_id、工作|
p工作
结束
跨所有队列排队的作业:

Sidekiq::Queue.all.each do |队列|
#p queue.name,queue.size
排队。每项任务|
p job.klass,job.args
结束
结束

当你使用
sidekiq/api
检查工人时,你可以看到工人在做什么,这个答案可能已经过时了:我得到
NoMethodError:undefined method
klass'`
作业。klass
在2020年仍然可用。检查它是否像调用
job.jid
一样生成以下错误:
NoMethodError:undefined method
jid'for#`这是因为我们试图从队列中获取作业ID吗?请澄清一下:Sidekiq::queue.all将只输出正在进行的作业,而不是计划的作业。正如接受的答案所述,您需要使用Sidekiq::ScheduledSet.new来获取计划的作业。