Rails 3 如何定制 404 and 500 错误页面_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > Rails 3 如何定制 404 and 500 错误页面

Rails 3 如何定制 404 and 500 错误页面

 2012/3/17 15:30:45  chen_miao  程序员俱乐部  我要评论(0)
  • 摘要:Rails3如何定制404and500错误页面在application_controller.rb中使用rescue_from可以完成大部分工作:classApplicationController<ActionController::Basedefself.rescue_errorsrescue_fromException,:with=>:render_errorrescue_fromRuntimeError,:with=>
  • 标签:rails 错误

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使用了RackRouting异常ActionDispatch::ShowExceptions 中处理了,而没有传入到application controller中,

比较靠谱且简单的解决方案是在routes.rb最后加一条默认routes,指向到一个类似routing_erroraction中,但需要加多一个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

?

?

?

发表评论
用户名: 匿名