2015-10-05 64 views
1

我正在将一个广泛的后台任务外推到sidekiq worker(第一次使用sidekiq)。Rails如何判断sidekiq worker是否使用了perform_async

我已经能够得到这个正确运行。

但我不知道如何检查sidekiq worker的进度 - 检查worker是否完成perform_async函数的最佳方法是什么?

汽车工人sidekiq任务:

class AutoWorker 
    include Sidekiq::Worker 

    def perform(lead_id, cars) 
     logger.info "WORKER CREATED" 
     lead = Lead.find(lead_id) 
     response = ZipCodeCheck.new(cars: cars, lead: lead).execute 
    end 
end 

从我的控制器称为:

def update 
    respond_to do |format| 
     if @lead.update(lead_params) 
      cars = params[:car_array] 

      AutoWorker.perform_async(@lead.id, cars) 
      format.json { render action: 'show', status: :created, location: @lead } 
     else 
      format.html { redirect_to @lead, notice: 'Lead was successfully updated.' } 
      format.json { render action: 'show', status: :created, location: @lead} 
     end 
     else 
     format.html { render action: 'edit' } 
     format.json { render json: @lead.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

回答

4

结帐以下扩展宝石sidekiq:https://github.com/utgarda/sidekiq-status/blob/master/README.md

这是从我读:

job_id = MyJob.perform_async(*args) 
data = Sidekiq::Status::get_all job_id 
data # => {status: 'complete', update_time: 1360006573, vino: 'veritas'} 
Sidekiq::Status::get  job_id, :vino #=> 'veritas' 
Sidekiq::Status::at  job_id #=> 5 
Sidekiq::Status::total job_id #=> 100 
Sidekiq::Status::message job_id #=> "Almost done" 
相关问题