Rails救援无效或无法到达

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

我在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。但是,当我在浏览器中测试卷曲时,它仍会显示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
1个回答
0
投票

一个可能的原因可能是better_errors

如果在救援块中引发错误,则其cause将是原始错误。 better_errors改为显示cause,这意味着回溯将不在救援块中。这给您一种幻想,它永远都无法挽救。

最近已修复,有关更多详细信息,请参见https://github.com/BetterErrors/better_errors/pull/459

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