модуль ActiveJob::Enqueuing::ClassMethods
Включает метод perform_later для инициализации задания.
Публичные методы экземпляра
# File activejob/lib/active_job/enqueuing.rb, line 82 def perform_later(...) job = job_or_instantiate(...) enqueue_result = job.enqueue yield job if block_given? enqueue_result end
Добавляет задание в очередь. По умолчанию аргументы должны быть либо String, Integer, Float, NilClass, TrueClass, FalseClass, BigDecimal, Symbol, Date, Time, DateTime, ActiveSupport::TimeWithZone, ActiveSupport::Duration, Hash, ActiveSupport::HashWithIndifferentAccess, Array, Range, или экземпляры GlobalID::Identification, хотя это можно расширить, добавив пользовательские сериализаторы.
Возвращает экземпляр класса задания, помещенного в очередь с аргументами, доступными в Job#arguments, или false , если добавление в очередь не удалось.
После попытки добавления в очередь задание будет передано в необязательный блок.
Если Active Job используется совместно с Active Record, и perform_later вызывается внутри транзакции Active Record, то добавление в очередь неявно откладывается до подтверждения транзакции или отбрасывается при ее откате. В таком случае perform_later вернет экземпляр задания, как если бы он был успешно помещен в очередь, но все равно вернет false , если какой-либо обработчик предотвратил добавление задания в очередь.
Это поведение можно изменить на основе задания:
class NotificationJob < ApplicationJob self.enqueue_after_transaction_commit = false end
Приватные методы экземпляра
# File activejob/lib/active_job/enqueuing.rb, line 92 def job_or_instantiate(*args, &_) # :doc: args.first.is_a?(self) ? args.first : new(*args) end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.