Rails路由中有以下代码:
class LegacyRedirector
InvalidUrlError = Class.new(ActionController::RoutingError)
def call(params, request)
URI.parse(request.path)
rescue URI::InvalidURIError => e
raise InvalidUrlError.new(e.message)
end
end
# routes.rb
match 'a', to: redirect(LegacyRedirector.new)这是用来捕获入侵的URL的。然而,当我在浏览器中测试它的curl时,它仍然会显示URI::InvalidURIError,而不是我的新错误类。救援队似乎从来没有达到过,但我相信我是在拯救正确的类型。这怎么可能呢?
URI::InvalidURIError at /twitter/typeahead-js/wikis/home[
=========================================================
> bad URI(is not URI?): "/twitter/typeahead-js/wikis/home["
lib/gitlab/routing.rb, line 31
------------------------------
``` ruby31 URI.parse(request.path)
32拯救URI::残废=> e
33 InvalidUrlError.new(e.message)
34端
发布于 2020-06-03 06:57:14
一个可能的原因可能是better_errors。
如果在救援块中引发错误,则其cause将是原始错误。better_errors反而会显示这个cause,这意味着反向跟踪不会出现在救援块中。这让你产生了一种错觉,那就是它从未获救。
这是最近修复的,有关更多细节,请参见https://github.com/BetterErrors/better_errors/pull/459。
https://stackoverflow.com/questions/62166975
复制相似问题