8

Rails 通知では、「process_action.action_controller」をサブスクライブしており、ペイロードにさらに属性を追加したいと考えています。どうやってやるの?

append_info_to_payload を使用してみましたが、これは何もしないようです。

module AppendExceptionPayload
  module ControllerRuntime
    extend ActiveSupport::Concern

    protected 

    def append_info_to_payload(payload)
      super
      payload[:happy] = "HAPPY"
    end
  end
end

サブスクリプションと上記のコードは Rails エンジン内にあるため、ここで呼び出して追加します。

require 'append_exception_payload'

module Instrument
  class Engine < ::Rails::Engine

    ActiveSupport.on_load :action_controller do
      include AppendExceptionPayload::ControllerRuntime
    end

  end
end
4

2 に答える 2

10

賞金を上げた後、私は自分で解決策を見つけました。Rails はこれを非常にきれいに処理します。

基本的に、このappend_info_to_payloadメソッドはまさにこれを目的としています。

したがって、セッション情報と signed_in ユーザー情報を含めるために、これを my に追加しましたapplication_controller.rb:

def append_info_to_payload(payload)
    super
    payload[:session] = request.session_options[:id] rescue ""
    payload[:user_id] = session[:user_id] rescue "unknown"
end
于 2013-01-17T07:47:07.300 に答える
2

だから私は飛び込んで、process_actionメソッド(プライベート)append_info_to_payloadインスタンスメソッド(パブリック)のAPIを見て、プロセスアクションメソッドは次のようにそのコードでappend_info_to_payloadを呼び出すようです:

ActiveSupport::Notifications.instrument("process_action.action_controller", raw_payload) do |payload|
    result = super
    payload[:status] = response.status
    append_info_to_payload(payload)
    result
  end

そして append_info_to_payload は次のように機能します

def append_info_to_payload(payload) #:nodoc:
  payload[:view_runtime] = view_runtime
end

payload[:view_runtime]代わりにpayload[:happy]試すか、使用しようとすることをお勧めしますpayload[:status]

残念ながら、この件に関するドキュメントは実際にはありません。

于 2013-01-17T00:52:40.967 に答える