在Rails引擎中附加救援响应?

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

我有两个自定义异常,我试图在引擎中添加到Rails.application.config.action_dispatch.rescue_responses

config.action_dispatch.rescue_responses.merge!({
  'Exceptions::Unauthorized' => :unauthorized,
  'Exceptions::Forbidden' => :forbidden
})

以上在应用程序中工作正常,但是当我把它放在引擎中的初始化器中时:

Rails.application.config.action_dispatch.rescue_responses.merge!({
  'Exceptions::Unauthorized' => :unauthorized,
  'Exceptions::Forbidden' => :forbidden
})

它被忽略了。我假设因为引擎的初始化程序在Rails设置rescue_responses之前运行?我能做些什么不同的想法?

ruby-on-rails ruby-on-rails-4 ruby-on-rails-5
2个回答
1
投票

config.action_dispatch.rescue_responses值仅用于暂时。如果你查看https://github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/railtie.rb#L36它在初始化程序块中合并到ActionDispatch::ExceptionWrapper.rescue_responses,在任何初始化程序脚本之前进行评估:-(

如果你看一下,例如ActiveRecord,他们在Railtie文件中设置它:https://github.com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/railtie.rb#L25


0
投票

在应用程序初始化程序中调整ActionDispatch::ExceptionWrapper.rescue_responses是有意义的。这是配置值结束的地方,这种行为在this Rails issue中得到确认。

但是在图书馆的情况下,它的铁路应该附加到config.action_dispatch.rescue_responses

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