2016-06-23 53 views
0

2つのジョブ(ImportCsvJobとProcessCsvJob)を持つRailsアプリケーションがあります。私は目に見えアプリでヒントことができるようにすることをキュー私は(application_helper.rb内)、このヘルパーメソッドを持っているのジョブが残っています。そして、私は、その後に渡され、私のインデックスコントローラ上でそれを使用Rails Sidekiqキューサイズが機能しない

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) 

私がしようRailsコンソールでデバッグするSidekiq :: Queue.new.sizeを使用して、それはまだ0

ランニングを与える:

を:だから、基本的に私は何が起こっているか確認するためにWebインターフェイスを使用してsidekiqの監視を追加
redis-server 
bundle exec sidekiq 
+0

説明のため、sidekiq console/webインターフェイスのデフォルトキューでジョブが実行されていますが、同時に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プロセスは、すでにそれをキューからポップして実行しています。キューは空ですが、ジョブはまだ完了していません。

関連する問題