модуль 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 93
def initialize(*arguments)
@arguments = arguments
@job_id = SecureRandom.uuid
@queue_name = self.class.queue_name
@scheduled_at = nil
@priority = self.class.priority
@executions = 0
@exception_executions = {}
@timezone = Time.zone&.name
end Создаёт новый экземпляр задачи. Принимает аргументы, которые будут переданы методу perform.
Публичные методы экземпляра
# File activejob/lib/active_job/core.rb, line 150 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 107
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 ? scheduled_at.utc.iso8601(9) : nil,
}
end Возвращает хэш с данными задачи, которые можно безопасно передать адаптеру очереди.
# File activejob/lib/active_job/core.rb, line 51 def successfully_enqueued? @successfully_enqueued end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.