在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 { |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
分享到:
相关推荐
埃多 因为有时您的用户会收到ERRors,所以您想对此做些事情。... 非常感谢rails admin和devs的贡献者,gem的漂亮代码对尝试使该gem尽可能模块化和可扩展性非常有用。 好的部分。 如果您要从0.10.x
基金会Rails助手 使用出色的Gem for Rails 4.1+应用程序。 包括: 一个定制的Form...仅完全支持Rails 4.1 / 4.2 / 5/6和Foundation 6 某些功能可能适用于Foundation 5及更早版本,但结果可能会有所不同,并且
Gaffe使在Rails应用程序中自定义错误页面变得容易。 它利用了Rails 3.2(显然是4.0+)中存在的一项功能,即exceptions_app 。 它带有默认错误页面,但是可以很容易地覆盖它们(您应该这样做)。 默认错误页面如下所...
产品特点简单,预定义的Redux动作自动加载状态,包括加载错误基于承诺的动作,无需其他笨拙的中间件(可选)禁用的乐观更新可选的响应解析Sane默认值,高度可定制自动为每种资源生成可扩展的缩减器和更多!...
: : 来自Routes的JS从您的Rails路由生成路径帮助程序和API方法,从而使您的工作效率更高,并防止发生与路由相关的错误。 由于代码生成是完全可定制的,因此可以在非常不同的场景中使用。为什么? :thinking_face: ...
纯验证这是一个函数对象,旨在通过传递输入 ID 和错误消息来自动创建前端验证。 错误消息将在相应的标签中输出:在标签中创建跨度以显示错误消息,跨度 id 是基于带有 _validator 后缀的输入 id 创建的。 因为跨度在...
绝大多数代码定制和错误修复都应该在这里进行。 (2)后视引擎主机( ) 这对用户来说主要是一种便利,因此他们可以快速启动和运行后视镜。 这也允许用户在定义明确的扩展点自定义视图和其他组件,而无需将它们...
主动支持– Rails的实用程序类和Ruby扩展 Active Support是实用程序类和标准库扩展的集合,这些实用程序和标准库扩展对Rails框架很有用。 这些添加项驻留在此软件包中,因此可以根据需要在Rails之外的Ruby项目中...
本书介绍了java ee规范的三大主要规范jsf、ejb 3和jpa,其中jsf是sun公司提供的jsf ri;ejb 3部分则包含session bean、message driven bean的详细介绍。所使用的应用服务器是jboss 5.1和weblogic 11g,详细介绍了...
Bugsnag错误监控和Ruby异常报告器 Ruby的Bugsnag异常报告器会立即通知您从 , Sinatra , Rack或纯Ruby应用程序引发的异常。 任何未捕获的异常都会触发通知,该通知将发送到您的Bugsnag项目。产品特点自动报告未处理...
灵活标准的定制:换主题、换节目、换形式都是rails风格。 稳定,所有依赖项都很好地使用了量 rails 社区。 支持从简单到复杂的项目:简单的预定义逻辑,复杂的可以通过正常的rails方式完成。 为快速管理做贡献 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
koa-logs-full 为什么要再造个轮子?...默认监听错误,在出错时,自动打出错误日志。 在日志目录下会按照环境名+日期+.log的格式维护对应的日志文件。 支持个性化的日志内容样式定制,使用实现 支持c风
添加图像,字体和文件 使用public文件夹 更改HTML 在模块系统之外添加资产 何时使用public文件夹 使用全局变量 添加引导程序使用自定义主题 增加流量 添加路由器 添加自定义环境变量 在HTML中引用环境变量 在Shell...
Rails中的一个错误跟踪器工具,是为用户量身定制的。
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...