2011-01-09 67 views
7

嘿,我希望你能帮助我。如何处理像rails3中的404/500错误

我试图找到一种方法,将用户定向到默认的错误页面404.html和500.html在我的公用文件夹。

因此,当存在路由或nomethod错误应该有指向。 我已经尝试了一些东西在我的应用程序控制器,但它没有奏效。

非常感谢!

+0

我以为把公共文件夹404.htm和500.htm是好的。但我不确定。 – PeterWong 2011-01-09 17:07:32

+0

我在默认情况下获得了那些内容。但是,如果出现错误,他们不会出现 – daniel 2011-01-09 17:08:40

回答

19

Rails会在生产模式下自动执行此操作。当您将应用程序上传到实时服务器时,Rails会负责处理这些异常并以正确的标题状态呈现正确的错误页面。如果你想看到那些网页是什么样子(用于测试或东西),只需要直接访问它们通过http://localhost:3000/404.html

当你设置你的Rails应用程序的实时服务器上(让我们使用Apache为例),你将网站根作为您的应用程序中的/public文件夹。然后,无论何时向该服务器地址发出请求,Apache首先查看该公用文件夹并尝试提供静态资源(这是[environment].rb中的可配置选项)。如果它找不到请求的页面,那么请求将通过Ruby堆栈转发。

当处于生产模式时,如果Rails遇到一个没有处理的错误(即开始,救援),它将整个错误抛到堆栈上,然后告诉Apache(在我的例子中)呈现适当的错误。

下面是一些常见的错误,你会在开发模式,他们在生产模式下呈现什么看:

ActiveRecord::RecordNotFound => 404 (page not found) 
nil.method => 500 (server error) unless you turn off whiny nils 
ActionController::RoutingError => 404 (page not found) 
2

如果在生产模式下运行自动发生 - 不需要你做手工。