2010-03-31 84 views

回答

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路由完成的:

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

然后,您可以对此请求执行任何操作。

+0

谢谢,非常有用! – Victor 2010-04-06 00:13:53

6

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页的任何未知的路线。

相关问题