【发布时间】: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