rescue_from错误处理程序在Rails中没有捕获所有异常

时间:2014-07-11 10:20:08

标签: ruby-on-rails exception-handling

我在ApplicationController类中有自定义错误处理代码:

  unless ActionController::Base.config.consider_all_requests_local
    rescue_from Exception, :with => :render_error
    rescue_from ActiveRecord::RecordNotFound, :with => :render_not_found
    rescue_from ActionController::RoutingError, :with => :render_not_found
    rescue_from ActionController::UnknownController, :with => :render_not_found
  end

但是,如果我输入一个捣碎的无效网址,例如:' / we / efe / qwe / wqeqw / qwe'带有config.consider_all_requests_local = false的系统为我提供了标准的Rails 404页面,而不是被以下内容捕获:

rescue_from ActionController :: RoutingError,:with => :render_not_found

查看异常跟踪日志,显示Rails正在引发ActionController::RoutingError (No route matches [GET] "/we/efe/qwe/wqeqw/qwe"):但是,我无法确定为什么它没有被我的处理程序捕获。

为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

显然它是Rails 3.2+引发ActionController :: RoutingError异常的方式。

答案是您需要在路由底部添加一个默认的命名路由,以捕获所有未路由的请求:

get '*unmatched_route', :to => 'application#no_route'