Rails救援无效或无法到达

时间:2020-06-03 06:57:14

标签: ruby-on-rails error-handling

我在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
```

1 个答案:

答案 0 :(得分:1)

一个可能的原因可能是better_errors

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

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