Rails Sidekiq队列大小不起作用

时间:2016-06-23 12:36:49

标签: ruby-on-rails ruby sidekiq rails-activejob

我有一个带有2个作业的Rails应用程序(ImportCsvJob和ProcessCsvJob)。因此,我可以在应用程序中明显暗示队列中仍有作业,我有这个帮助方法(在application_helper.rb中): 模块ApplicationHelper    def queued_job_count         Sidekiq :: Queue.new.size     结束 结束 然后我在我的索引控制器上使用它,然后将其传递给视图进行处理并在应用程序中提供视觉提示。   def指数     @still_have_jobs =!queued_job_count.zero?   结束 但是,当我仍然有1个后台作业(ImportCsvJob)时,这可以工作,但是当我添加(ProcessCsvJob)时,它不再起作用。 import_csv_job.rb 要求' open-uri' class ImportCsvJob< ActiveJob ::基地   queue_as:默认   def执行(csv_record)     csv_record [:object_changes] = ApplicationController.helpers.generate_hash(csv_record [:object_changes])     ObjectRecord.create(csv_record)   结束 结束 process_csv_job.rb class ProcessCsvJob< ActiveJob ::基地   queue_as:默认   def执行(csv_path)     csv_file = open(csv_path,' rb:UTF-8')     options = {         row_sep :: auto,col_sep:",",         user_provided_headers:[:object_id,:object_type,:timestamp,:object_changes],         remove_empty_values:true,         headers_in_file:true     }     SmarterCSV.process(csv_file,options)执行| array |         ImportCsvJob.perform_later(array.first)     结束   结束 结束 最后,在这个被称为的模型中: ProcessCsvJob.perform_later(gdrive.uploaded_file_link) 当我尝试使用Sidekiq :: Queue.new.size在Rails控制台中调试时,它仍然给出0。 运行: Redis的服务器 捆绑exec sidekiq

2 个答案:

答案 0 :(得分:4)

正在执行的作业不再排队。 Sidekiq进程已经将其从队列中弹出并正在执行它。队列为空,但作业尚未​​完成。

答案 1 :(得分:0)

所以,基本上我使用网络界面添加了对sidekiq的监控,以查看发生了什么:

enter image description here

当我检查时,没有排队任务也没有安排,因为大部分工作几乎立即执行(并行)。

因此,我的解决方案是知道忙碌工作的数量:

module ApplicationHelper
    def queued_job_count
        Sidekiq::ProcessSet.new.first['busy']
    end
end

然后在索引上:

  def index
    @still_have_jobs = !queued_job_count.zero?
  end

它有效! :)