No release in over 3 years
Low commit activity in last 3 years
Gem that adds the ability to prevent duplicate delayed jobs from being created.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
 Dependencies
 Project Readme

DelayedJobLoner

Adds an option on handle_asynchronously or delay that specifies which attributes to check for uniqueness on. A new job will not be created if one already exists for that method and object.

Installation

Add this line to your application's Gemfile:

gem 'delayed_job_loner'

And then execute:

$ bundle

Or install it yourself as:

$ gem install delayed_job_loner

Migration

The jobs table requires a migration to add the loner_hash string field.

$ script/rails generate delayed_job_loner
$ rake db:migrate

Usage

Pass the option :loner or :unique_on to any method that you would provide :priority or :run_at. :unique_on should be an array of attributes that you want to check the uniqueness of the job against.

  • :loner just specifies that the job should be unique and will only check against the method name and object id
  • :unique_on allows you to specify the fields that it will check uniqueness against

Here is an example:

class Foo < ActiveRecord::Base
  
  def do_all_the_things
    # All the things!
  end
  handle_asynchronously :do_all_the_things, :unique_on => [:name, :other]

  def do_some_of_the_things
    # Some of the things!
  end

end

This allows you to do things like this:

foo = Foo.first
foo.do_all_the_things
  # Creates a new job
foo.do_all_the_things
  # Doesn't create a new job because we already created one

foo.delay(:priority => 10).do_some_of_the_things
  # Creates a new job
foo.delay(:priority => 10, :loner => true).do_some_of_the_things
  # Doesn't create a new job
foo.delay(:priority => 10).do_some_of_the_things
  # Creates a new job because we didn't specify :unique_on

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request