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.
Add this line to your application's Gemfile:
And then execute:
Or install it yourself as:
$ gem install delayed_job_loner
The jobs table requires a migration to add the loner_hash string field.
$ script/rails generate delayed_job_loner $ rake db:migrate
Pass the option
:unique_on to any method that you would provide
:unique_on should be an array of attributes that you want to check the uniqueness of the job against.
:lonerjust specifies that the job should be unique and will only check against the method name and object id
:unique_onallows 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
- Fork it
- Create your feature branch (
git checkout -b my-new-feature)
- Commit your changes (
git commit -am 'Added some feature')
- Push to the branch (
git push origin my-new-feature)
- Create new Pull Request