【问题标题】:Delayed Job & Rails Observers: calling without_delay延迟作业和 Rails 观察者:调用 without_delay
【发布时间】:2013-08-30 02:36:44
【问题描述】:

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

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?

谢谢!

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

【问题讨论】:

    标签: ruby-on-rails-3 asynchronous delayed-job observers


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2020-08-09
      • 2023-04-08
      • 2023-04-06
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多