module Delayed::Backend::Base::ClassMethods
Public Instance Methods
enqueue(*args)
click to toggle source
Add a job to the queue
# File lib/delayed/backend/base.rb, line 10 def enqueue(*args) job_options = Delayed::Backend::JobPreparer.new(*args).prepare enqueue_job(job_options) end
enqueue_job(options)
click to toggle source
# File lib/delayed/backend/base.rb, line 15 def enqueue_job(options) new(options).tap do |job| Delayed.lifecycle.run_callbacks(:enqueue, job) do job.hook(:enqueue) Delayed::Worker.delay_job?(job) ? job.save : job.invoke_job end end end
recover_from(_error)
click to toggle source
Allow the backend to attempt recovery from reserve errors
# File lib/delayed/backend/base.rb, line 38 def recover_from(_error); end
reserve(worker, max_run_time = Worker.max_run_time)
click to toggle source
# File lib/delayed/backend/base.rb, line 24 def reserve(worker, max_run_time = Worker.max_run_time) # We get up to 5 jobs from the db. In case we cannot get exclusive access to a job we try the next. # this leads to a more even distribution of jobs across the worker processes claims = 0 find_available(worker.name, worker.read_ahead, max_run_time).select do |job| next if claims >= worker.max_claims job.lock_exclusively!(max_run_time, worker.name).tap do |result| claims += 1 if result end end end
work_off(num = 100)
click to toggle source
# File lib/delayed/backend/base.rb, line 40 def work_off(num = 100) warn '[DEPRECATION] `Delayed::Job.work_off` is deprecated. Use `Delayed::Worker.new.work_off instead.' Delayed::Worker.new.work_off(num) end