【问题标题】:ActiveJob: Accessible instance variables between callbacksActiveJob:回调之间可访问的实例变量
【发布时间】: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

但是当工作执行时@carnil。是否可以以某种方式将实例变量从一个回调传递到第二个回调?即使只有ID 也可以。干杯。

【问题讨论】:

  • 这是一个工作类吗?工作是为了什么?您所称的工作(猜测不是汽车)通常会传递到工作中,如此处所示。 edgeapi.rubyonrails.org/classes/ActiveJob/Callbacks/… 但是,如果您创建了一个作业类,则可以在该类中创建一个实例变量,用于其他方法/钩子(只需将@car 在范围内上移一个级别。
  • 您不能在入队和执行之间共享实例变量,因为代码片段可以在完全不同的服务器上运行。无论如何,你试图实现的整个事情似乎有点反activejob,因为你正在做的事情应该属于回调中的工作流程方法。您不应该在回调中做昂贵且容易出错的事情,因为这将非常难以回溯
  • 当你想实现一个接一个的作业链时很有用,例如用于开发自己的数据管道

标签: ruby-on-rails rails-activejob


【解决方案1】:

您需要将其设为job 的实例变量并以这种方式访问​​:

class Car < ActiveJob::Base
  attr_accessor :car
end

然后

before_enqueue do |job|
  # do something
  job.car = create_car
end

before_perform do |job|
  # do something
  job.car.update(type: 'broken')
end

【讨论】:

  • 这真的有效吗?似乎无法让它工作(在 Sidekiq 中)
猜你喜欢
  • 2023-03-15
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多