Skip to content

opsb/delayed_job_groups_mongoid

Repository files navigation

delayed job groups

Adds grouping to jobs. Only 1 job in each group will be executed regardless of the number of workers.

Requires

  • rails 3
  • Latest version of delayed_job from github - current release(v2.1.0.pre2) does not support enqueue hooks
  • active_record backend - other backends aren't supported

Install

# Gemfile
gem 'delayed_job_groups'

Add migration to add lock_group column

# db/migrate/xxx_add_lock_group_to_delayed_jobs
class AddLockGroupToDelayedJobs < ActiveRecord::Migration
  def self.up
    add_column :delayed_jobs, :lock_group, :string
  end

  def self.down
    remove_column :delayed_jobs, :lock_group
  end
end

Usage

Job groups are strings. You need to specify what the job_group should be in a block. Delayed job will only perform 1 job from each group at a time.

Job groups for standard jobs

 class ResizeImageJob < Struct.new(:format)
	 job_group{ |resize_image_job| resize_image_job.format }
	
	 def perform
		 resize_to format
	 end
 end

Job groups when using delay()

 class Person < ActiveRecord::Base
	 job_group{ |person| person.role }
	
	 def send_welcome
	    ...
	 end
 end

 Person.create(:role => "admin").delay.send_welcome

Job groups when methods are declared asynchonous

 class Person < ActiveRecord::Base
	 job_group{ |person| person.role }

	 def send_welcome
	    ...
	 end
	 handle_asynchronously :send_welcome
 end

 Person.create(:role => "admin").send_welcome

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages