在Rails中显示404而不是500

时间:2010-03-31 13:40:24

标签: ruby-on-rails

在我的rails应用程序中,我定义了路由,以便用户可以访问http://mydomain.com/qwe2

等记录

但如果输入错误的“qwe2”,他们就会获得500页。我认为404会更合适。

如何更改显示的错误页面?感谢

2 个答案:

答案 0 :(得分:7)

config/routes.rb

的底部创建一个包罗万象的路线
map.connect '*path', :controller => 'unknown_route'

然后在app/controllers/unknown_route_controller中你可以这样做:

class UnknownRouteController < ApplicationController
  def index    
    render :file => "#{Rails.root}/public/404.html", :layout => false,
           :status => 404
  end
end

这将为您提供任何未知路线的404页面。

答案 1 :(得分:6)

获得500代码的唯一原因是您的应用程序抛出异常。这可能是由于缺少路线,您没有任何与之匹配的定义,或者因为您的控制器或视图已崩溃。

在生产环境中,您可能希望捕获应用程序生成的所有错误,并在适当时显示更好的错误屏幕,或者如果需要,还可以显示“未找到”页面。

例如,一个强力捕获所有异常捕获器可能被定义为:

class ApplicationController < ActionController::Base
  if (Rails.env.production?)
    rescue_from Object, :with => :uncaught_exception_rescue
  end

protected
  def uncaught_exception_rescue(exception)
    render(:partial => 'errors/not_found', :status => :not_found)
  end
end

如果您想知道何时执行此操作,则返回404类型的错误很容易:

render(:partial => 'errors/not_found', :status => :not_found)

确保您有某种默认路线,否则您将始终收到这些错误。通常这是通过在routes.rb的最后添加一个catch-all路径完成的.rb:

map.default '/*path', :controller => 'default', :action => 'show'

然后你可以用这个请求做任何你想做的事。