【问题标题】:Rails rescue inactive or unreachableRails 救援不活动或无法访问
【发布时间】: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


    【解决方案1】:

    一个可能的原因是better_errors

    如果在救援块中出现错误,则其cause 将是原始错误。 better_errors 改为显示 cause,这意味着回溯不会在救援块中。这会让你产生一种永远无法获救的错觉。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-10
      • 2018-08-12
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      相关资源
      最近更新 更多