我有一个在回调中调用观察者类方法的观察者。这些观察者类方法旨在异步处理:
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 对象排入队列时无法序列化单例观察者的实例。见这里。