Provides general behavior that will be included into every Active Job object that inherits from ActiveJob::Base
.
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.
# File activejob/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
Creates a new job instance. Takes the arguments that will be passed to the perform method.
# File activejob/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
Attaches the stored job data to the current instance. Receives a hash returned from serialize
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 activejob/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
Returns a hash with the job data that can safely be passed to the queuing adapter.
# File activejob/lib/active_job/core.rb, line 49 def successfully_enqueued? @successfully_enqueued end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.