Rails 3 – 自定义错误和404页面

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

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

谷歌上发现的所有教程都已有数年之久,并且不适用于Rails 3。

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

谢谢

如果要捕获特定错误,请在ApplicationController使用rescue_from

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

来自Jose Valim的 2013 Rails 3.2更新

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

 config.exceptions_app = self.routes 

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

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

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

  1. 您需要在路由中使用匹配而不是get / post / put / delete,因为此类exception可能在任何HTTP请求中发生;
  2. 除非在config / environments / development.rb中将config.consider_all_requests_local设置为false,否则您将无法在开发中看到自定义exception。 原因是,如果请求被认为是本地的,Rails将总是倾向于显示调试exception页面; [或运行rails server -e production ]
  3. 您始终可以在env [“action_dispatch.exception”]中访问控制器中的原始exception;
  4. 发生exception后,无法设置cookie,会话和闪存。 他们都已经被序列化回客户端;
  5. 最后,Rails使用的默认例外应用程序只需在public / STATUS.html中呈现页面即可:action_dispatch / middleware / public_exceptions.rb

请记住,无论你在错误控制器中做什么,它都不应该是任何“幻想”。 保持简单,因为您的应用程序已经出现问题!

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

如果您正在谈论实际捕获这些exception,并做一些动态的东西,我认为基本function是相同的,有一些around_filterapplication_controller中捕获您的特定exception,即ActiveRecord::RecordNotFound并执行某些操作。