module ActiveJob::Core
Active Job Core
Предоставляет общее поведение, которое будет включено в каждый объект Active Job, унаследованный от ActiveJob::Base.
Атрибуты
Аргументы задачи
Отслеживает любые исключения, поднятые бэкэндом, чтобы вызывающие стороны могли просмотреть ошибки.
Отслеживает время добавления задачи в очередь.
Hash, содержащий количество раз, когда эта задача обрабатывала ошибки для каждого конкретного объявления retry_on. Ключи — строковое представление исключений, указанных в объявлении retry_on, а соответствующее значение — количество выполнений, в которых соответствующее объявление retry_on обрабатывало одно из перечисленных исключений.
Количество раз, когда эта задача была выполнена (что увеличивается при каждом повторе, например, после исключения).
Идентификатор задачи
I18n.locale, который будет использоваться во время выполнения задачи.
Приоритет задачи (меньшее значение — больший приоритет).
Идентификатор, необязательно предоставляемый адаптером
Очередь, в которой будет находиться задача.
Time когда задача должна быть выполнена
Временная зона, которая будет использоваться при выполнении задачи.
Общедоступные методы класса
# File activejob/lib/active_job/core.rb, line 95
def initialize(*arguments)
@arguments = arguments
@job_id = SecureRandom.uuid
@queue_name = self.class.queue_name
@scheduled_at = nil
@_scheduled_at_time = nil
@priority = self.class.priority
@executions = 0
@exception_executions = {}
@timezone = Time.zone&.name
end Создает новый экземпляр задачи. Принимает аргументы, которые будут переданы методу perform.
Общедоступные методы экземпляров
# File activejob/lib/active_job/core.rb, line 153 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 = Time.iso8601(job_data["enqueued_at"]) if job_data["enqueued_at"] self.scheduled_at = Time.iso8601(job_data["scheduled_at"]) if job_data["scheduled_at"] end
Присоединяет сохраненные данные задачи к текущему экземпляру. Получает хэш, возвращенный из 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 177
def scheduled_at=(value)
@_scheduled_at_time = if value&.is_a?(Numeric)
ActiveJob.deprecator.warn(<<~MSG.squish)
Assigning a numeric/epoch value to scheduled_at is deprecated. Use a Time object instead.
MSG
Time.at(value)
else
value
end
@scheduled_at = value
end # File activejob/lib/active_job/core.rb, line 110
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(9),
"scheduled_at" => _scheduled_at_time ? _scheduled_at_time.utc.iso8601(9) : nil,
}
end Возвращает хэш с данными задачи, которые можно безопасно передать адаптеру очереди.
# File activejob/lib/active_job/core.rb, line 53 def successfully_enqueued? @successfully_enqueued end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.