module Que::JobMethods
Public Instance Methods
_run(args: nil, kwargs: nil, reraise_errors: false)
click to toggle source
Run the job with error handling and cleanup logic. Optionally support overriding the args, because it’s necessary when jobs are invoked from ActiveJob
.
# File lib/que/job_methods.rb, line 42 def _run(args: nil, kwargs: nil, reraise_errors: false) if args.nil? && que_target args = que_target.que_attrs.fetch(:args) end if kwargs.nil? && que_target kwargs = que_target.que_attrs.fetch(:kwargs) end run(*args, **kwargs) default_resolve_action if que_target && !que_target.que_resolved rescue => error raise error unless que_target que_target.que_error = error run_error_notifier = begin handle_error(error) rescue => error_2 Que.notify_error(error_2, que_target.que_attrs) true end Que.notify_error(error, que_target.que_attrs) if run_error_notifier retry_in_default_interval unless que_target.que_resolved raise error if reraise_errors end
log_level(elapsed)
click to toggle source
# File lib/que/job_methods.rb, line 72 def log_level(elapsed) :debug end
Private Instance Methods
default_resolve_action()
click to toggle source
# File lib/que/job_methods.rb, line 94 def default_resolve_action return unless que_target destroy end
destroy()
click to toggle source
# File lib/que/job_methods.rb, line 166 def destroy return unless que_target if id = que_target.que_attrs[:id] Que.execute :destroy_job, [id] end que_target.que_resolved = true end
error_count()
click to toggle source
# File lib/que/job_methods.rb, line 120 def error_count return 0 unless que_target count = que_target.que_attrs.fetch(:error_count) que_target.que_error ? count + 1 : count end
expire()
click to toggle source
# File lib/que/job_methods.rb, line 100 def expire return unless que_target if id = que_target.que_attrs[:id] Que.execute :expire_job, [id] end que_target.que_resolved = true end
finish()
click to toggle source
# File lib/que/job_methods.rb, line 110 def finish return unless que_target if id = que_target.que_attrs[:id] Que.execute :finish_job, [id] end que_target.que_resolved = true end
handle_error(error)
click to toggle source
To be overridden in subclasses.
# File lib/que/job_methods.rb, line 128 def handle_error(error) return unless que_target max = resolve_que_setting(:maximum_retry_count) if max && error_count > max expire else retry_in_default_interval end end
que_target()
click to toggle source
This method defines the object on which the various job helper methods are acting. When using Que
in the default configuration this will just be self, but when using the Que
adapter for ActiveJob
it’ll be the actual underlying job object. When running an ActiveJob::Base subclass that includes this module through a separate adapter this will be nil - hence, the defensive coding in every method that no-ops if que_target
is falsy.
# File lib/que/job_methods.rb, line 84 def que_target raise NotImplementedError end
resolve_que_setting(*args)
click to toggle source
# File lib/que/job_methods.rb, line 88 def resolve_que_setting(*args) return unless que_target que_target.class.resolve_que_setting(*args) end
retry_in(period)
click to toggle source
Explicitly check for the job id in these helpers, because it won’t exist if we’re running synchronously.
# File lib/que/job_methods.rb, line 148 def retry_in(period) return unless que_target if id = que_target.que_attrs[:id] values = [period] if e = que_target.que_error values << "#{e.class}: #{e.message}".slice(0, 500) << e.backtrace.join("\n").slice(0, 10000) else values << nil << nil end Que.execute :set_error, values << id end que_target.que_resolved = true end
retry_in_default_interval()
click to toggle source
# File lib/que/job_methods.rb, line 140 def retry_in_default_interval return unless que_target retry_in(resolve_que_setting(:retry_interval, error_count)) end