2016-06-23 2 views
0

2 개의 작업 (ImportCsvJob 및 ProcessCsvJob)이있는 레일 애플리케이션이 있습니다. 나는 눈에 띄게 응용 프로그램에서 힌트를 할 수 있도록하는 큐 나는 (application_helper.rb 내부)이 도우미 메서드가있는 작업이 아직 없습니다 : 그럼 난 다음에 전달 내 지수 컨트롤러에 사용레일 사이드 키 큐 크기가 작동하지 않습니다.

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

처리 및 응용 프로그램에서 시각적 힌트를주는보기. 난 아직도 1 개 배경 작업 (ImportCsvJob)을했을 때

def index 
    @still_have_jobs = !queued_job_count.zero? 
    end 

그러나이 작동하지만, 나는 (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를 사용하여, 그것은 여전히 ​​0

실행을 제공합니다

을 : 그래서, 기본적으로 내가 무슨 일이 일어 났는지 확인하기 위해 웹 인터페이스를 사용하여 sidekiq에 대한 모니터링을 추가
redis-server 
bundle exec sidekiq 
+0

설명을 위해 실제로 sidekiq 콘솔/웹 인터페이스의 기본 대기열에서 작업이 실행되지만 Sidekiq :: Queue.new.size를 동시에 실행하면 0이 반환됩니다. – beaorn

+0

@Bryce 예, 처리를 위해 csv 파일을 업로드했습니다. sidekiq 콘솔에서 처리 중이지만 여전히 Sidekiq :: Queue.new.size에서 0을 얻습니다. – Raven

+0

호기심에서 벗어나 :'Sidekiq :: Queue.all'이 반환하는 것? – mudasobwa

답변

0

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 

작동

따라서 여기에 바쁜 작업의 횟수가 알고 내 솔루션입니다! :)

4

실행중인 작업이 더 이상 대기열에 포함되지 않습니다. Sidekiq 프로세스가 이미 대기열에서 빠져 나와 실행 중입니다. 대기열이 비어 있지만 작업이 아직 완료되지 않았습니다.

관련 문제