我正在研究一种解决方案,以显示延迟作业的完成百分比(使用delayed_job gem).目前,我的delayed_jobs表的数据库迁移类似于以下内容:
class CreateDelayedJobs < ActiveRecord::Migration def self.up create_table :delayed_jobs,:force => true do |table| table.integer :priority,:default => 0 # Allows some jobs to jump to the front of the queue table.integer :attempts,:default => 0 # Provides for retries,but still fail eventually. table.text :handler # YAML-encoded string of the object that will do work table.text :last_error # reason for last failure (See Note below) table.datetime :run_at # When to run. Could be Time.zone.Now for immediately,or sometime in the future. table.datetime :locked_at # Set when a client is working on this object table.datetime :Failed_at # Set when all retries have Failed (actually,by default,the record is deleted instead) table.string :locked_by # Who is working on this object (if locked) table.string :queue # The name of the queue this job is in table.integer :progress table.timestamps end add_index :delayed_jobs,[:priority,:run_at],:name => 'delayed_jobs_priority' end def self.down drop_table :delayed_jobs end end
我在一个控制器方法中使用一个enqueue进程来处理延迟的作业,并在lib / build_detail.rb中引用一个类:
Delayed::Job.enqueue(BuildDetail.new(@object,@com))
lib / build_detail.rb文件如下:
class BuildDetail < Struct.new(:object,:com) def perform total_count = object.person_ids.length progress_count = 0 people = com.person object.person_ids do |abc| progress_count += abc.size Delayed::Job.current.update_attribute :progress,(progress_count/total_count) end end end
延迟:: Job.current不起作用.我在this posting上看到了Delayed :: Job.current方法,但看起来这个方法从未包含在主delayed_jobs github项目中.
如何在每次作业完成循环时访问当前作业(从实际作业中),更新进度字段?