使用ActiveSupport::Notifications.subscribe来订阅Rails异常。

问题描述 投票:7回答:1

我正在探索ActiveSupport::Notifications,并希望订阅Rails异常,比如ActiveRecord::ActiveRecordError异常。类似这样。

ActiveSupport::Notifications.subscribe /ActiveRecordError/ do |*args|

  # More code here ...

end

这个订阅将存在于第三方的 gem中,所以我不能灵活地用 "应用内 "的 beginrescueend来包装我的 AcitveRecord调用。一个潜在的问题是,Exceptions是否被认为是或处理为事件,可以被订阅?

ruby-on-rails ruby activerecord exception-handling notifications
1个回答
0
投票

异常不作为ActiveSupport通知处理,完整的列表可以在这里找到。https:/guides.rubyonrails.orgactive_supportinstrumentation.html。.

然而,你可以钩入 ActionController 中的一个轨交。

module YourGem
  module Rails
    class Railtie < ::Rails::Railtie
        config.after_initialize do
          ActiveSupport.on_load(:action_controller) do
            rescue_from ActiveRecord::RecordNotFound, with: :record_not_found

            private

            def record_not_found(exception)
              ActiveSupport::Notifications.instrument "my.custom.event", this: :data do
                # do your custom stuff here
              end
            end
          end
       end
    end
  end
end

使用这种方法,你可能甚至不需要ActiveSupport通知,只需要在救援中执行你的代码即可?

https:/api.Rubyonrails.orgclassesRailsRailtie.html。

© www.soinside.com 2019 - 2024. All rights reserved.