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

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

如果爬虫程序命中类似“http://localhost:3000/admin_”的URL,则上述代码将引发以下错误:
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'

我有两个问题:
为什么rescue不工作?如果我将其更改为rescue LoadError => e,异常将得到优雅的处理。
除了挽救这种例外情况,还有其他选择吗?

最佳答案

如果省略异常类型,则默认情况下rescue将仅解救StandardError异常和子类。
LoadError不是从StandardError继承的:

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

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

关于ruby-on-rails - 在Rails应用程序中拯救LoadError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32677611/

10-13 01:00