0

thrift_client 0.8.1 ライブラリを使用しています。また、いくつかのフック インターフェイスをサポートしています。

client = ThriftClient.new(FooService, host)

client.add_callback :before_method do |*args|
  ActionController::Base.logger.info instance_eval("@current_server")
  logger.info args.inspect
end

client.add_callback :post_connect do |client|
  logger.info "A thrift server connection has been made<#{client.current_server}>"
end

メソッドを呼び出すたびに、thrift サーバーの情報をログに記録したいと考えています。フックをインストールしましたが、期待どおりに機能しない:before methodと思います。クラス内instance_eval("@current_server")@current_serverインスタンス変数です。ThriftClient何が問題ですか?

4

1 に答える 1

0

:before_method コールバックが ThriftClient インスタンス コンテキスト内で呼び出されるとは思えません。これは :before_method の呼び出しです:

  def do_callbacks(callback_type_sym, *args)
    return unless @callbacks[callback_type_sym]
    @callbacks[callback_type_sym].each do |callback|
      callback.call(*args)
    end
  end

:before_method CB は、メソッド名で呼び出されます。:post_connect の場合、それはクライアント インスタンスです。

于 2012-11-06T15:19:43.113 に答える