0

我有一个在回调中调用观察者类方法的观察者。这些观察者类方法旨在异步处理:

class FooObserver << ActiveRecord::Observer
  def after_create(foo)
    self.class.do_something(foo)
  end

  class << self
    def do_something(foo)
      ...
    end
    handle_asynchronously :do_something
  end
end

我希望 do_something() 异步运行。看来我在这里正确使用了handle_asynchronously。不幸的是,我的日志显示,当触发回调时,观察者实际上运行的是do_something_without_delay()而不是#do_something,表明该任务不是异步运行的。)

有人可以解释为什么这个任务可以毫不拖延地运行,以及如何让我的观察者异步运行 do_something 吗?

谢谢!

PS do_something() 被定义为类方法,因为delayed_job 在将任务作为Delayed::Job 对象排入队列时无法序列化单例观察者的实例。见这里

4

1 回答 1

2

我想通了:观察者实际上正在使用delayed_job;method_without_delay() 仅在该作业准备好处理后才在工作线程中调用(以防止无限的延迟序列)。

于 2013-08-29T18:36:44.063 回答