`
DerekMorgan
  • 浏览: 18885 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

rails3定制404和500错误

阅读更多

在application_controller.rb 中使用rescue_from 可以完成大部分工作:

01 class ApplicationController < ActionController::Base
02   
03   def self.rescue_errors
04     rescue_from Exception,                            :with => :render_error
05     rescue_from RuntimeError,                         :with => :render_error
06     rescue_from ActiveRecord::RecordNotFound,         :with => :render_not_found
07     rescue_from ActionController::RoutingError,       :with => :render_not_found
08     rescue_from ActionController::UnknownController,  :with => :render_not_found
09     rescue_from ActionController::UnknownAction,      :with => :render_not_found
10   end
11   rescue_errors unless Rails.env.development?
12   
13   def render_not_found(exception = nil)
14     render :template => "errors/404", :status => 404, :layout => 'public'
15   end
16   
17   def render_error(exception = nil)
18     render :template => "errors/500", :status => 500, :layout => 'public'
19   end
20 
21 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 { |envRails.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 api(文档)

    6. **错误处理**:Rails API鼓励返回标准的HTTP状态码和结构化的错误消息,以便客户端可以理解并适当地处理错误。 7. **JSON Schema**:通过使用JSON Schema,开发者可以定义API的数据结构和验证规则,增强API的可...

    The Rails 4 Way

    本书深入浅出地介绍了Rails 4的各种组件和功能,适合已经熟悉Ruby编程并希望深入了解Rails框架的开发人员。 #### 描述:学习ruby! 这句简短的描述暗示了本书的一个重要目标:帮助读者通过学习Rails来提高他们的...

    基于Java的Rails3消息队列系统 Sidekiq.zip

    Sidekiq是一款高效的消息队列系统,主要用于Ruby on Rails应用,但在这里提到的是它与Java的结合使用。...在实际项目中,这种跨语言的解决方案需要根据具体需求进行定制,确保满足业务的稳定性和扩展性。

    weixin_rails_middleware, 微信集成 ruby weixin_rails_middleware for integration weixin..zip

    综上所述,`weixin_rails_middleware` 是一款强大且易于使用的工具,能够帮助 Ruby on Rails 开发者无缝集成微信服务,实现各种定制化的微信功能,如自动回复、用户管理、消息推送等。通过深入理解其工作原理和使用...

    Ruby on Rails 指南 v5.0.1 中文版

    - **创建Rails项目**:介绍如何使用`rails new`命令来生成一个新的Rails项目,包括如何指定版本和其他选项。 - **Hello, Rails!**:通过一个简单的“Hello, World!”示例,让读者快速上手Rails的基本操作流程。 - **...

    rails-api-4.2.4

    4. **错误处理**: 返回结构化的错误信息,包括错误代码、错误消息和可能的解决方案。 5. **认证与授权**: 实现安全的用户认证和权限控制,如JWT(JSON Web Tokens)或OAuth2。 **开发工具与库** 1. **ActiveModel::...

    Rails3消息队列系统 Sidekiq.7z

    此外,它还支持自定义错误处理器,可以定制化错误处理策略。 在实际应用中,常见的使用场景包括: - 发送电子邮件:发送邮件通常是一个耗时的操作,可以放在消息队列中,由后台服务处理。 - 图片处理:上传图片后,...

    Rails里给文件上传添加progress_bar

    在Ruby on Rails(Rails)框架中,为文件上传添加进度条功能可以显著提升用户体验,让用户在上传大...在实际项目中,你还可以根据需求进一步定制和扩展,比如添加预览功能,或者对上传过程进行更多的错误处理和反馈。

    Ruby-SimpleForm轻松处理Rails表单

    同时,`:checked_value`和`:unchecked_value`可以定制选中和未选中的值。 10. **提交按钮** 提交按钮可以通过`f.button`创建,也可以通过`:button`选项自定义样式: ```ruby , 'Save Changes', class: 'btn-...

    The Rails 5 way 英文原版

    3. REST、资源和Rails:介绍了REST(Representational State Transfer)架构风格的核心理念,如何在Rails中以资源为中心构建应用,以及Rails中RESTful路由的CRUD(创建、读取、更新、删除)操作。这部分内容还涉及了...

    ruby on rails 搭建redmine

    Ruby on Rails 是一个基于Ruby语言的开源Web应用...在实际操作过程中,可能会遇到各种问题,但只要遵循Ruby on Rails的开发习惯和Redmine的文档指示,都能找到解决办法。记住,不断学习和实践是成为IT行业大师的关键。

    Ruby-RailsAdmin一个Rails引擎提供了一个易于使用的界面来管理您的数据

    Ruby on Rails 是一款广受欢迎的Web开发框架,它以其MVC(模型-视图-控制器)架构模式和生产力导向的设计理念赢得了开发者们的喜爱。RailsAdmin 是一个基于Ruby on Rails的后台管理界面引擎,它允许开发者快速创建和...

    The rails4 way

    - **开发模式**: 详细讨论了开发环境下Rails的行为特征,比如自动代码重载、错误报告等。 - **测试模式**: 探讨了如何设置和使用测试环境来验证应用程序的功能,包括单元测试、集成测试等。 - **生产模式**: 分析...

    rails实现验证码实例

    在Ruby on Rails(Rails)框架中,验证码是一种用于防止恶意自动化的工具,它通常用于注册、登录和其他敏感操作,以确保只有人类用户能够执行这些操作。在这个实例中,我们将探讨如何在Rails应用中实现验证码功能。 ...

    Ruby-RailsErd为Rails应用程序生成实体关系图

    Rails Erd还支持一些可选参数来定制生成的ERD,例如: - `--attributes`: 包含模型的属性信息。 - `--file`: 指定输出文件的路径和名称。 - `--diagram-depth`: 控制关联的深度,决定显示多少级的关联关系。 - `--...

    Rails相关电子书汇总二

    3. **扩展Rails**:这部分可能涵盖Rails的可扩展性和模块化设计,如自定义gem的创建,引擎的使用,以及如何利用Rails的插件系统来增强功能。 4. **企业级特性**:可能涉及安全(如认证和授权)、性能优化、错误处理...

    rails登陆画面(原)

    如果`rails.exe`是一个定制的Rails开发环境,可能包含了预配置的数据库连接、 gems(如Devise)和示例代码,帮助开发者快速搭建登录系统。通过运行这个工具,用户可以跳过一些基础设置,直接进入开发阶段。 总结...

    让你的dreamweaver也支持rails!

    对于开发者来说,这样的工具不仅提供了便利,还有助于学习和定制以适应个人工作流程。 在压缩包中的文件“rubyweaver.mxp”很可能是Adobe Dreamweaver的插件安装文件,用户可以通过导入这个文件到Dreamweaver中来...

Global site tag (gtag.js) - Google Analytics