module ActiveJob::Core
Provides general behavior that will be included into every Active Job object that inherits from ActiveJob::Base
.
Attributes
Job arguments
Track any exceptions raised by the backend so callers can inspect the errors.
Track when a job was enqueued
Hash that contains the number of times this job handled errors for each specific retry_on declaration. Keys are the string representation of the exceptions listed in the retry_on declaration, while its associated value holds the number of executions where the corresponding retry_on declaration handled one of its listed exceptions.
Number of times this job has been executed (which increments on every retry, like after an exception).
Job Identifier
I18n.locale to be used during the job.
Priority that the job will have (lower is more priority).
ID optionally provided by adapter
Queue in which the job will reside.
Timestamp when the job should be performed
Timezone to be used during the job.
Public Class Methods
Creates a new job instance. Takes the arguments that will be passed to the perform method.
# File lib/active_job/core.rb, line 91 def initialize(*arguments) @arguments = arguments @job_id = SecureRandom.uuid @queue_name = self.class.queue_name @priority = self.class.priority @executions = 0 @exception_executions = {} @timezone = Time.zone&.name end
Public Instance Methods
Attaches the stored job data to the current instance. Receives a hash returned from serialize
Examples¶ ↑
class DeliverWebhookJob < ActiveJob::Base attr_writer :attempt_number def attempt_number @attempt_number ||= 0 end def serialize super.merge('attempt_number' => attempt_number + 1) end def deserialize(job_data) super self.attempt_number = job_data['attempt_number'] end rescue_from(Timeout::Error) do |exception| raise exception if attempt_number > 5 retry_job(wait: 10) end end
# File lib/active_job/core.rb, line 146 def deserialize(job_data) self.job_id = job_data["job_id"] self.provider_job_id = job_data["provider_job_id"] self.queue_name = job_data["queue_name"] self.priority = job_data["priority"] self.serialized_arguments = job_data["arguments"] self.executions = job_data["executions"] self.exception_executions = job_data["exception_executions"] self.locale = job_data["locale"] || I18n.locale.to_s self.timezone = job_data["timezone"] || Time.zone&.name self.enqueued_at = job_data["enqueued_at"] end
Returns a hash with the job data that can safely be passed to the queuing adapter.
# File lib/active_job/core.rb, line 104 def serialize { "job_class" => self.class.name, "job_id" => job_id, "provider_job_id" => provider_job_id, "queue_name" => queue_name, "priority" => priority, "arguments" => serialize_arguments_if_needed(arguments), "executions" => executions, "exception_executions" => exception_executions, "locale" => I18n.locale.to_s, "timezone" => timezone, "enqueued_at" => Time.now.utc.iso8601 } end
# File lib/active_job/core.rb, line 49 def successfully_enqueued? @successfully_enqueued end
Private Instance Methods
# File lib/active_job/core.rb, line 193 def arguments_serialized? defined?(@serialized_arguments) && @serialized_arguments end
# File lib/active_job/core.rb, line 189 def deserialize_arguments(serialized_args) Arguments.deserialize(serialized_args) end
# File lib/active_job/core.rb, line 178 def deserialize_arguments_if_needed if arguments_serialized? @arguments = deserialize_arguments(@serialized_arguments) @serialized_arguments = nil end end
# File lib/active_job/core.rb, line 185 def serialize_arguments(arguments) Arguments.serialize(arguments) end
# File lib/active_job/core.rb, line 170 def serialize_arguments_if_needed(arguments) if arguments_serialized? @serialized_arguments else serialize_arguments(arguments) end end