0

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")たが、コンソールまたはログファイルに何も出力されていません。

何かアドバイス?

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 に答える