【发布时间】:2020-06-03 06:57:14
【问题描述】:
我在 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
------------------------------
``` ruby
> 31 URI.parse(request.path)
32 rescue URI::InvalidURIError => e
33 raise InvalidUrlError.new(e.message)
34 end
```
【问题讨论】:
标签: ruby-on-rails error-handling