【问题标题】:Rails how to tell if a sidekiq worker is done with perform_asyncRails 如何判断 sidekiq 工作人员是否使用 perform_async 完成
【发布时间】:2016-01-01 14:27:24
【问题描述】:

我正在将一项广泛的后台任务外推到 sidekiq 工作人员(第一次使用 sidekiq)。

我已经能够让它正确运行。

但我不确定如何检查 sidekiq 工作人员的进度 - 检查工作人员是否使用 perform_async 函数完成的最佳方法是什么?

AutoWorker 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

【问题讨论】:

    标签: ruby-on-rails ruby redis sidekiq


    【解决方案1】:

    查看 sidekiq 的以下扩展 gem: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"
    

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 2015-01-03
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多