Rails 3 - 自定义错误& 404页

时间:2010-11-23 20:50:18

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

我正在Heroku上构建一个Rails 3应用程序。现在我的错误页面和404页面都是标准的rails / heroku页面。

我想定制这两个。有一个错误页面,并有一个404的页面。

谷歌上发现的所有教程都已存在多年,并且不适用于Rails 3。

你能否提出一个很好的现代教程或如何做到这一点的提示?

由于

4 个答案:

答案 0 :(得分:36)

如果您想捕获特定错误,请使用ApplicationController中的rescue_from

否则,如果您只想编辑默认错误页面,请在 {Rails.root} / public中编辑 500.html 400.html 文件

答案 1 :(得分:11)

答案 2 :(得分:11)

来自Jose Valim

的Rails 3.2 2013更新

当Rails 3.0问世时,人们突然忽略的一个功能是能够更好地处理异常。问题是:由于Rails 3变得更加“流畅”,我们不得不将一些功能移到中间件堆栈,这迫使我们移动整个异常处理。 Rails 3.2尝试通过允许您设置自己的异常机架应用程序(在发生故障时调用)来尝试将某些自定义重新带回游戏。例如,您可以在config / application.rb中将例外应用程序设置为您自己的路由器:

config.exceptions_app = self.routes

现在,每次出现异常时,都会调用您的路由器。因此,要渲染自定义404页面,您只需添加到路由器:

match "/404", :to => "errors#not_found"

并根据需要在控制器中实现逻辑!但是,如果你走这条路,有几点要记住:

  1. 您需要在路线中使用匹配而不是/ post / put / delete 因为在任何HTTP请求中都可能发生此类异常;
  2. 您将无法在开发中看到自定义异常 除非你将config.consider_all_requests_local设置为false 配置/环境/ development.rb。原因是,如果请求是 考虑到本地,Rails总是倾向于显示调试 例外页面; [或运行 rails server -e production ]
  3. 您始终可以在控制器中访问原始例外 ENV [ “action_dispatch.exception”];
  4. 之后无法设置Cookie,会话或闪存 发生异常。他们都已经被序列化回了 客户端;
  5. 最后,Rails使用的默认例外应用程序 只需在公共场所呈现页面/ STATUS.html即可: action_dispatch /中间件/ public_exceptions.rb
  6. 请记住,无论你在错误控制器中做什么,它都不应该是“花哨的”。保持简单,因为您的应用程序已经出现问题!

答案 3 :(得分:3)

好吧rails3仍在公用文件夹中使用相同的404.html,422.html和500.html。您可以自定义这些。

如果您正在谈论实际捕获这些异常,并做一些动态的东西,我认为基本功能是相同的,有一些around_filter可以在application_controller中捕获您的特定异常,即{{ 1}}并做一些事情。