繁体   English   中英

Rails Sidekiq队列大小不起作用

[英]Rails Sidekiq Queue size not working

我有一个有2个工作的Rails应用程序(ImportCsvJob和ProcessCsvJob)。 这样我就可以在应用程序中明显暗示队列中还有作业,我有此帮助程序方法(在application_helper.rb内部):

module ApplicationHelper
   def queued_job_count
        Sidekiq::Queue.new.size
    end
end

然后,在索引控制器上使用它,然后将其传递到视图以进行处理并在应用程序中提供可视提示。

  def index
    @still_have_jobs = !queued_job_count.zero?
  end

但是,当我还有1个后台作业(ImportCsvJob)时,此方法起作用,但是当我添加(ProcessCsvJob)时,它不再起作用。

import_csv_job.rb

require 'open-uri'

class ImportCsvJob < ActiveJob::Base
  queue_as :default

  def perform(csv_record)
    csv_record[:object_changes] = ApplicationController.helpers.generate_hash(csv_record[:object_changes])
    ObjectRecord.create(csv_record)
  end
end

process_csv_job.rb

class ProcessCsvJob < ActiveJob::Base
  queue_as :default

  def perform(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) do |array|
        ImportCsvJob.perform_later(array.first)
    end
  end

end

最后,在模型中将其称为:

ProcessCsvJob.perform_later(gdrive.uploaded_file_link)

当我尝试使用Sidekiq :: Queue.new.size在Rails控制台中调试时,它仍然给出0。

正在运行:

redis-server
bundle exec sidekiq

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

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

在此处输入图片说明

正如我检查的那样,没有排队的任务,也没有计划的时间,因为大多数工作都设置为几乎立即(并行)执行。

因此,这是我的解决方案,以了解是否有繁忙的工作:

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

然后在索引上:

  def index
    @still_have_jobs = !queued_job_count.zero?
  end

有用! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM