如何在 ActiveJob 回调方法中获取 Job 属性?
Posted
技术标签:
【中文标题】如何在 ActiveJob 回调方法中获取 Job 属性?【英文标题】:How to get Job attributes in ActiveJob callback methods? 【发布时间】:2015-06-18 07:35:33 【问题描述】:Rails 4.2、active_jobs、callback_methods
在自定义 Job 的 perform 方法中,我创建了一条新记录(并将文件上传到 S3)。如何在 after_perform 回调中传递或获取新记录 ID?我想在 after_perform 发送一封电子邮件,其中包含指向 S3 文档的链接……但是,不确定如何在 after_perform 方法中获取 id。根据文档,您可以使用 job.attributes,但我得到“未定义的方法属性”。
我可以将邮件程序调用移到 perform 方法中,但我宁愿使用回调正确处理它。我不确定如何在 perform 方法之外访问属性(或这些属性的来源)。
我试图通过将它放在回调中来做一些侦探工作(以确定回调可用的属性):
puts "job: # job "
或
puts "job: # job.attributes "
或
puts "job: # job.attributes.first "
这些都不起作用,并且都导致未定义的“属性”。
【问题讨论】:
【参考方案1】:你必须使用arguments
而不是attributes
:
after_perform do |job|
record = job.arguments.first
# Do something with the record
end
我的 perform 方法如下所示:
def perform(record)
# Perform stuff
end
【讨论】:
我的参数是空的,不知道为什么.. 如何在回调中传递作业参数以上是关于如何在 ActiveJob 回调方法中获取 Job 属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ActiveJob 设置 Sidekiq 的重试次数?
使用 Delayed::Job 时使用 ActiveJob 设置优先级