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方法正是为此而生的。

因此,为了包含会话信息和登录用户信息,我将其添加到我的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,并且 proccess 操作方法似乎在其代码中调用 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 回答