如何处理rails3中的404/500等错误

时间:2011-01-09 17:05:34

标签: ruby-on-rails error-handling ruby-on-rails-3

嘿,我希望你能帮助我。

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

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

非常感谢!!

3 个答案:

答案 0 :(得分:20)

Rails在生产模式下运行时会自动为您执行此操作。当您将应用程序上传到实时服务器时,Rails负责处理这些异常并使用正确的标头状态呈现正确的错误页面。如果您正在尝试查看这些网页的内容(用于测试或其他内容),只需通过http://localhost:3000/404.html

直接访问它们

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

当处于生产模式时,如果Rails遇到未处理的错误(即begin,rescue),它会将错误一直抛到堆栈,然后告诉Apache(在我的示例中再次)渲染适当的错误。

以下是您在开发模式中会看到的一些常见错误以及它们在生产模式下呈现的内容:

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

答案 1 :(得分:2)

如果在生产模式下运行,则会自动发生 - 无需您手动执行此操作。

答案 2 :(得分:2)

查看this post以重定向导致路由错误的所有请求。