0

当我的 FbPlace 类(mongo 文档)的对象被更新时,我想触发一个新对象的创建。FbPlace 仅通过控制台或 rake 任务中的脚本进行更新。rails s是否可以检查我的 fb_places 订阅是否在我的选项卡或日志文件中正确触发?

ActiveSupport::Notifications.subscribe("fb_places_updated.graph_engine") do |*args|
  puts "WORKS"
  Rails.logger.debug("+++ WORKS")
  #Other irrelevant logic 
end

我已经添加putsRails.logger.debug查看当我执行类似的操作时通知是否被触发FbPlace.update_attribute(name: "test_name"),但我还没有看到任何打印到控制台或我的日志文件的内容。

有什么建议吗?

4

1 回答 1

2

您没有指定实际订阅事件的位置。我会想象您在初始化程序中执行此操作,并且 rake 任务会加载环境,因此应该没问题。

要查看事件发生时块是否得到评估,您可以使用Pry,这样您只需键入args并查看里面的内容。将其放入您的 Gemfile 中,然后:

ActiveSupport::Notifications.subscribe("fb_places_updated.graph_engine") do |*args|
  binding.pry
end

运行 rake 任务。如果您没有最终进入 Pry 会话,则不会触发该事件。我不确定什么应该触发该fb_places_updated.graph_engine事件。我认为你使用它mongoid,据我所知它不会触发任何仪器 - 需要有另一面:

ActiveSupport::Notifications.instrument("fb_places_updated.graph_engine", some_data: 42)

如果是这种情况,我不会打扰通知,只需使用after_update 回调或模型中的观察者

于 2013-01-14T20:30:15.810 回答