модуль ActiveJob::Core
Ядро Active Job
Предоставляет общее поведение, включаемое в каждый объект Active Job, наследующий ActiveJob::Base.
Атрибуты
Аргументы задания
Отслеживает любые исключения, вызванные бэкендом, чтобы вызывающий код мог проверить ошибки.
Отслеживает время постановки задания в очередь
Hash, содержащий количество обработок ошибок этим заданием для каждого конкретного объявления retry_on. Ключи — строковые представления исключений, перечисленных в объявлении retry_on, а соответствующие им значения содержат количество выполнений, в которых соответствующее объявление retry_on обработало одно из перечисленных исключений.
Количество выполнений этого задания (увеличивается при каждой повторной попытке, например после исключения).
Идентификатор задания
Локаль I18n.locale, используемая во время выполнения задания.
Приоритет задания (чем ниже значение, тем выше приоритет).
Идентификатор, необязательно предоставляемый адаптером
Очередь, в которой будет находиться задание.
Time, когда следует выполнить задание
Часовой пояс, используемый во время выполнения задания.
Публичные методы класса
# File activejob/lib/active_job/core.rb, line 103
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 160 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 = deserialize_time(job_data["enqueued_at"]) if job_data["enqueued_at"] self.scheduled_at = deserialize_time(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 117
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" => 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 58 def successfully_enqueued? @successfully_enqueued end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.