【发布时间】:2017-05-04 21:24:23
【问题描述】:
我的工作中有以下 sn-p:
before_enqueue do |job|
# do something
@car = create_car
end
before_perform do |job|
# do something
@car.update(type: 'broken')
end
但是当工作执行时@car 是nil。是否可以以某种方式将实例变量从一个回调传递到第二个回调?即使只有ID 也可以。干杯。
【问题讨论】:
-
这是一个工作类吗?工作是为了什么?您所称的工作(猜测不是汽车)通常会传递到工作中,如此处所示。 edgeapi.rubyonrails.org/classes/ActiveJob/Callbacks/… 但是,如果您创建了一个作业类,则可以在该类中创建一个实例变量,用于其他方法/钩子(只需将
@car在范围内上移一个级别。 -
您不能在入队和执行之间共享实例变量,因为代码片段可以在完全不同的服务器上运行。无论如何,你试图实现的整个事情似乎有点反activejob,因为你正在做的事情应该属于回调中的工作流程方法。您不应该在回调中做昂贵且容易出错的事情,因为这将非常难以回溯
-
当你想实现一个接一个的作业链时很有用,例如用于开发自己的数据管道
标签: ruby-on-rails rails-activejob