跳至内容 跳至搜索

包含用于作业初始化的 perform_later 方法。

方法
J
P

实例公共方法

perform_later(...)

将作业推送到队列。默认情况下,参数必须是 StringIntegerFloatNilClassTrueClassFalseClassBigDecimalSymbolDateTimeDateTimeActiveSupport::TimeWithZoneActiveSupport::DurationHashActiveSupport::HashWithIndifferentAccessArrayRange 或 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 81
def perform_later(...)
  job = job_or_instantiate(...)
  enqueue_result = job.enqueue

  yield job if block_given?

  enqueue_result
end

实例私有方法

job_or_instantiate(*args, &)

# File activejob/lib/active_job/enqueuing.rb, line 91
def job_or_instantiate(*args, &) # :doc:
  args.first.is_a?(self) ? args.first : new(*args)
end