ActiveSupport通知 - 打印到控制台或登录调试?

时间:2013-01-14 19:08:34

标签: ruby-on-rails ruby-on-rails-3 activesupport

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

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")之类的操作时是否会触发通知,但我还没有看到任何打印到控制台或我的日志档案。

有什么建议吗?

1 个答案:

答案 0 :(得分: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 callbackobserver