`
DerekMorgan
  • 浏览: 18666 次
  • 性别: 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


 

分享到:
评论

相关推荐

    errdo:一个简单的插件,用于处理,记录和定制Rails应用程序中的生产错误

    埃多 因为有时您的用户会收到ERRors,所以您想对此做些事情。... 非常感谢rails admin和devs的贡献者,gem的漂亮代码对尝试使该gem尽可能模块化和可扩展性非常有用。 好的部分。 如果您要从0.10.x

    foundation_rails_helper:Zurb基金会的Rails Helper框架

    基金会Rails助手 使用出色的Gem for Rails 4.1+应用程序。 包括: 一个定制的Form...仅完全支持Rails 4.1 / 4.2 / 5/6和Foundation 6 某些功能可能适用于Foundation 5及更早版本,但结果可能会有所不同,并且

    gaffe::collision:Gaffe以干净,简单的方式处理Rails错误页面

    Gaffe使在Rails应用程序中自定义错误页面变得容易。 它利用了Rails 3.2(显然是4.0+)中存在的一项功能,即exceptions_app 。 它带有默认错误页面,但是可以很容易地覆盖它们(您应该这样做)。 默认错误页面如下所...

    redux-rails:Redux和您的服务器畅通无阻

    产品特点简单,预定义的Redux动作自动加载状态,包括加载错误基于承诺的动作,无需其他笨拙的中间件(可选)禁用的乐观更新可选的响应解析Sane默认值,高度可定制自动为每种资源生成可扩展的缩减器和更多!...

    js_from_routes::motorway:从Rails路线自动生成JS

    : : 来自Routes的JS从您的Rails路由生成路径帮助程序和API方法,从而使您的工作效率更高,并防止发生与路由相关的错误。 由于代码生成是完全可定制的,因此可以在非常不同的场景中使用。为什么? :thinking_face: ...

    pureValidator:纯 Javascript 验证功能旨在与 cakePHP 和 Ruby on Rails 配合使用

    纯验证这是一个函数对象,旨在通过传递输入 ID 和错误消息来自动创建前端验证。 错误消息将在相应的标签中输出:在标签中创建跨度以显示错误消息,跨度 id 是基于带有 _validator 后缀的输入 id 创建的。 因为跨度在...

    rearview-engine:用于后视镜的 Rails 引擎。 该项目仅供后视开发人员使用。 用户应该去livingsocialreview

    绝大多数代码定制和错误修复都应该在这里进行。 (2)后视引擎主机( ) 这对用户来说主要是一种便利,因此他们可以快速启动和运行后视镜。 这也允许用户在定义明确的扩展点自定义视图和其他组件,而无需将它们...

    activesupport:分叉的定制导轨修复,请不要使用

    主动支持– Rails的实用程序类和Ruby扩展 Active Support是实用程序类和标准库扩展的集合,这些实用程序和标准库扩展对Rails框架很有用。 这些添加项驻留在此软件包中,因此可以根据需要在Rails之外的Ruby项目中...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

     本书介绍了java ee规范的三大主要规范jsf、ejb 3和jpa,其中jsf是sun公司提供的jsf ri;ejb 3部分则包含session bean、message driven bean的详细介绍。所使用的应用服务器是jboss 5.1和weblogic 11g,详细介绍了...

    bugsnag-ruby:Bugsnag错误监视和报告软件,用于轨道,sinatra,机架和Ruby

    Bugsnag错误监控和Ruby异常报告器 Ruby的Bugsnag异常报告器会立即通知您从 , Sinatra , Rack或纯Ruby应用程序引发的异常。 任何未捕获的异常都会触发通知,该通知将发送到您的Bugsnag项目。产品特点自动报告未处理...

    quick-admin:专注于管理,这个 REPO 将被弃用

    灵活标准的定制:换主题、换节目、换形式都是rails风格。 稳定,所有依赖项都很好地使用了量 rails 社区。 支持从简单到复杂的项目:简单的预定义逻辑,复杂的可以通过正常的rails方式完成。 为快速管理做贡献 ...

    java开源包3

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    koa-logs-full:仿照rails风格的轻量log库,可以按rails的log风格记录请求日志。可以很好的解决nodejs由于单进程导致的日志串起来的问题

    koa-logs-full 为什么要再造个轮子?...默认监听错误,在出错时,自动打出错误日志。 在日志目录下会按照环境名+日期+.log的格式维护对应的日志文件。 支持个性化的日志内容样式定制,使用实现 支持c风

    React-BuildYourBurgerApp:在Dynamic React项目中,您可以构建和购买自己的定制Burger。 好吃!

    添加图像,字体和文件 使用public文件夹 更改HTML 在模块系统之外添加资产 何时使用public文件夹 使用全局变量 添加引导程序使用自定义主题 增加流量 添加路由器 添加自定义环境变量 在HTML中引用环境变量 在Shell...

    bugs2.0-开源

    Rails中的一个错误跟踪器工具,是为用户量身定制的。

    java开源包1

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包11

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包2

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包6

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包5

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

Global site tag (gtag.js) - Google Analytics