在Rails应用程序中挽救LoadError

时间:2015-09-20 09:02:21

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-1.8.7

在我的Rails 3应用程序中,我通过以下方式获取path_info:

Rails.application.routes.recognize_path(url, { :method => request.request_method }) rescue {}

如果抓取工具遇到“http://localhost:3000/admin_”之类的网址,则上述代码会引发以下错误:

LoadError: Expected /Users/user/myRailsApp/app/controllers/admin_controller.rb to define Admin_Controller
from /Users/user/.rvm/gems/ree-1.8.7-2012.02/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:492:in `load_missing_constant'

我有两个问题:

  1. 为什么rescue无效?如果我将其更改为rescue LoadError => e,则会正常处理异常。
  2. 有没有其他选择而不是拯救此类例外?

1 个答案:

答案 0 :(得分:1)

如果省略异常类型,默认情况下rescue将仅拯救StandardError例外和子类。

LoadError不会从StandardError继承:

LoadError.ancestors
 => [LoadError, ScriptError, Exception, Object, Kernel, BasicObject]

因此,单行救援模式不适用LoadError