When you want only one instance of your job queued at a time.
Add this line to your application's Gemfile:
gem 'activejob-lock'
And then execute:
$ bundle
Or install it yourself as:
$ gem install activejob-lock
require 'activejob/lock'
class MyLockedJob < ActiveJob::Base
lock_with do |record, message|
record
end
def perform(record, message)
record.do_work
end
end
There will never be two MyLockedJob for the same record enqueued at the same time.
Currently works only for resque. Contributions are welcomed for other backends.
- Fork it ( https://github.com/idolweb/activejob-lock/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request