Rails 3 – 自定义错误和404页面
我正在Heroku上构建一个Rails 3应用程序。 现在我的错误页面和404页面都是标准的rails / heroku页面。
我想定制这两个。 有一个错误页面,并有一个404的页面。
谷歌上发现的所有教程都已有数年之久,并且不适用于Rails 3。
你能否提出一个很好的现代教程或如何做到这一点的提示?
谢谢
如果要捕获特定错误,请在ApplicationController
使用rescue_from
。
否则,如果您只想编辑默认错误页面,请编辑{Rails.root} / public中的500.html和400.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"
并根据需要在控制器中实现逻辑! 但是,如果你走这条路,有几点要记住:
- 您需要在路由中使用匹配而不是get / post / put / delete,因为此类exception可能在任何HTTP请求中发生;
- 除非在config / environments / development.rb中将config.consider_all_requests_local设置为false,否则您将无法在开发中看到自定义exception。 原因是,如果请求被认为是本地的,Rails将总是倾向于显示调试exception页面; [或运行
rails server -e production
] - 您始终可以在env [“action_dispatch.exception”]中访问控制器中的原始exception;
- 发生exception后,无法设置cookie,会话和闪存。 他们都已经被序列化回客户端;
- 最后,Rails使用的默认例外应用程序只需在public / STATUS.html中呈现页面即可:action_dispatch / middleware / public_exceptions.rb
请记住,无论你在错误控制器中做什么,它都不应该是任何“幻想”。 保持简单,因为您的应用程序已经出现问题!
好吧rails3仍然在公共文件夹中使用相同的404.html,422.html和500.html。 您可以自定义这些。
如果您正在谈论实际捕获这些exception,并做一些动态的东西,我认为基本function是相同的,有一些around_filter
在application_controller
中捕获您的特定exception,即ActiveRecord::RecordNotFound
并执行某些操作。