Rails 3 如何定制 404 and 500 错误页面
在application_controller.rb 中使用rescue_from 可以完成大部分工作:
class ApplicationController < ActionController::Base def self.rescue_errors rescue_from Exception, :with => :render_error rescue_from RuntimeError, :with => :render_error rescue_from ActiveRecord::RecordNotFound, :with => :render_not_found rescue_from ActionController::RoutingError, :with => :render_not_found rescue_from ActionController::UnknownController, :with => :render_not_found rescue_from ActionController::UnknownAction, :with => :render_not_found end rescue_errors unless Rails.env.development? def render_not_found(exception = nil) render :template => "errors/404", :status => 404, :layout => 'public' end def render_error(exception = nil) render :template => "errors/500", :status => 500, :layout => 'public' end end
但 ActionController::RoutingError 在rails 3中却不能得到预期结果,因为Rails 3使用了Rack,Routing的异常在ActionDispatch::ShowExceptions 中处理了,而没有传入到application controller中,
比较靠谱且简单的解决方案是在routes.rb最后加一条默认routes,指向到一个类似routing_error的action中,但需要加多一个action感觉不是很必要,得益于rails 3 routing
的强大,可以很简单快捷方便的如此这般:
# make sure this rule is the last one
match '*path' => proc { |env| Rails.env.development? ? (raise ActionController::RoutingError, %{No route matches "#{env["PATH_INFO"]}"}) : ApplicationController.action(:render_not_found).call(env) }
即可,在development中可以仍然查看详细的异常track back方便调试。
一些给力链接:
http://www.perfectline.ee/blog/custom-dynamic-error-pages-in-ruby-on-rails
http://helderribeiro.net/?p=366
分享到:
相关推荐
Rails 3.1还引入了CoffeeScript作为默认的JavaScript语言,这是一种语法糖,它可以编译成标准的JavaScript,提供更优雅的语法和更好的错误处理。对于那些不喜欢JavaScript的开发者来说,这是一个巨大的福音。 ...
在Rails框架中,AJAX(Asynchronous JavaScript and XML)是一种常用的技术,用于创建动态和交互式的Web应用程序。AJAX允许页面在不刷新整个页面的情况下与服务器进行通信,从而提高用户体验。在本篇博文中,我们将...
Ajax(Asynchronous JavaScript and XML)技术的引入,为Web应用程序带来了革命性的变化,它使得页面无需刷新就能实现数据的动态更新,极大地提升了用户体验。Rails作为Ruby编程语言的一个强大框架,以其简洁、高效...
讨论如何优雅地处理所有404错误页面,为用户提供更好的错误提示信息。 ##### Part II—Database Recipes 这部分则专注于数据库相关的优化策略和技术实现。 **8. Add ForeignKey Constraints** 介绍如何在数据库...
### Rails Recipes Final.pdf 知识点解析 #### 标题:Rails Recipes Final.pdf - **核心概念**:本书名为《Rails Recipes》,旨在提供一系列针对Ruby on Rails开发过程中的实用技巧和解决方案。 #### 描述:...
**Ajax on Rails** 是一个关于将Ajax技术应用到Rails框架中的主题,旨在提升Web应用程序的用户体验,通过异步数据交换实现页面无刷新更新。Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的...
1. **代码简洁**:Rails 通过提供一系列约定优于配置的原则简化了开发流程,使得开发者能够快速地搭建起应用程序的基本结构,同时减少错误和冗余代码的产生。 2. **全栈支持**:作为一款全栈框架,Rails 同时支持...
- `public/`:静态资源,如 CSS、JavaScript 文件和错误页面。 - `test/`:测试代码,可以是 RSpec 或 MiniTest。 - `tmp/`:临时文件。 - `vendor/`:第三方库和资产。 3. **MVC 结构**: - **模型(Models)...
JavaScript还可以实现表单的异步提交,即AJAX(Asynchronous JavaScript and XML),这样用户在提交数据时无需等待页面刷新,提升用户体验。另外,JavaScript库和框架,如jQuery和React,提供了更便捷的方式来操作...
Rails提供了`flash`对象,可以在不同页面之间传递短暂消息,用于提示用户错误信息。 10. **测试(Test)** 为了确保代码的正确性,项目通常会包含测试文件。Rails支持多种测试框架,如RSpec和Test::Unit,用于编写...
3. AJAX:讲解Asynchronous JavaScript and XML,即异步JavaScript和XML,用于在不刷新整个页面的情况下更新部分网页内容。 4. jQuery:作为JavaScript的一个流行库,jQuery简化了许多常见的DOM操作和动画效果,...
AJAX(Asynchronous JavaScript and XML)是创建动态网页的关键技术,允许页面在不刷新的情况下与服务器进行交互。在这个项目中,AJAX用于在用户界面中实现无刷新的数据更新,提高了用户交互的流畅性。Rails的...
根据提供的文件信息,我们可以从《Groovy and Grails Recipes》一书中提炼出多个与Groovy语言及Grails框架相关的知识点。下面将详细阐述这些知识点。 ### Groovy编程语言 **1. Groovy简介** - **定义**:Groovy是...
#### Day 3:扩展 Rails **The ‘Items’ Table** 除了类别表之外,还需要创建一个用于存储具体任务项的表。 **MySQL table definition** 与之前一样,需要定义 MySQL 中的表结构。 **The Model** 对于任务项...
标题中的"authentication_and_devise_546"很可能是指一个关于Ruby on Rails应用程序的项目,其中涉及了身份验证和Devise库的使用。这个项目可能是为了教学或实践目的而创建的,帮助开发者理解如何在Rails应用中实现...
例如,在CMRI(Continuous Monitoring and Reporting Infrastructure)环境下,当应用程序不存在阻塞时,Merb仅需一个核心即可高效运行;而在80%阻塞的情况下,Merb需要两个核心才能达到同等性能。同样,在JRuby环境...
该项目是通过引导的。... 使用AJAX请求获取数据与API后端集成节点Ruby on Rails 在开发中代理API请求配置代理后出现“无效的主机头”错误手动配置代理配置WebSocket代理在开发中使用HTTPS 在服务器上生成动态<met
《Programming Ruby》是著名的Ruby语言教程,英文版的书籍...同时,Ruby的简洁和灵活性也使得它成为许多开发者首选的工具,尤其是在Web开发领域,Ruby on Rails框架的应用广泛,让Ruby在现代互联网开发中占据一席之地。