`

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

阅读更多

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

 

 

 

分享到:
评论

相关推荐

    noughts-and-crosses:跨界游戏

    该项目是通过引导的。... 使用AJAX请求获取数据与API后端集成节点Ruby on Rails 在开发中代理API请求配置代理后出现“无效的主机头”错误手动配置代理配置WebSocket代理在开发中使用HTTPS 在服务器上生成动态&lt;met

    react-rick-and-morty:使用Rick and Morty API https

    该项目是通过引导的。... 使用AJAX请求获取数据与API后端集成节点Ruby on Rails 在开发中代理API请求配置代理后出现“无效的主机头”错误手动配置代理配置WebSocket代理在开发中使用HTTPS 在服务器上生成动态&lt;met

    advanced-react-and-redux-testing

    该项目是通过引导的。... 使用AJAX请求获取数据与API后端集成节点Ruby on Rails 在开发中代理API请求配置代理后出现“无效的主机头”错误手动配置代理配置WebSocket代理在开发中使用HTTPS 在服务器上生成动态&lt;met

    react-hot-and-cold-challenge

    该项目是通过引导的。... 使用AJAX请求获取数据与API后端集成节点Ruby on Rails 在开发中代理API请求配置代理后出现“无效的主机头”错误手动配置代理配置WebSocket代理在开发中使用HTTPS 在服务器上生成动态&lt;met

    Rick-and-Morty-Guessing-Game

    更改页面&lt;title&gt; 安装依赖项 导入组件 代码分割 添加样式表 后处理CSS 添加CSS预处理器(Sass,Less等) 添加图像,字体和文件 使用public文件夹 更改HTML 在模块系统之外添加资产 何时使用public文件夹 ...

    good-luck-and-take-care-ne

    该项目是通过引导的。... 使用AJAX请求获取数据与API后端集成节点Ruby on Rails 在开发中代理API请求配置代理后出现“无效的主机头”错误手动配置代理配置WebSocket代理在开发中使用HTTPS 在服务器上生成动态&lt;met

    up-and-running-with-redux-observable

    与API后端集成节点Ruby on Rails 在开发中代理API请求配置代理后出现“无效的主机头”错误手动配置代理配置WebSocket代理在开发中使用HTTPS 在服务器上生成动态&lt;meta&gt;标记预渲染为静态HTML文件将数据从服务器...

    james-and-the-devil:J&TheD网站

    与API后端集成节点Ruby on Rails 在开发中代理API请求配置代理后出现“无效的主机头”错误手动配置代理配置WebSocket代理在开发中使用HTTPS 在服务器上生成动态&lt;meta&gt;标记预渲染为静态HTML文件将数据从服务器...

    authentication-is-register-with-react-and-firebase

    该项目是通过引导的。... 使用AJAX请求获取数据与API后端集成节点Ruby on Rails 在开发中代理API请求配置代理后出现“无效的主机头”错误手动配置代理配置WebSocket代理在开发中使用HTTPS 在服务器上生成动态&lt;met

    react-noughts-and-crosses:Mutliplayer横空出世,React Redux Firebase

    更改页面&lt;title&gt; 安装依赖项 导入组件 代码分割 添加样式表 后处理CSS 添加CSS预处理器(Sass,Less等) 添加图像,字体和文件 使用public文件夹 更改HTML 在模块系统之外添加资产 何时使用public文件夹 ...

    React-Kata-2---Lists-and-Conditionals

    更改页面&lt;title&gt; 安装依赖项 导入组件 代码分割 添加样式表 后处理CSS 添加CSS预处理器(Sass,Less等) 添加图像,字体和文件 使用public文件夹 更改HTML 在模块系统之外添加资产 何时使用public文件夹 ...

    predict-and-plot:React中的Tensorflow实现可预测1级函数

    该项目是通过引导的。... 使用AJAX请求获取数据与API后端集成节点Ruby on Rails 在开发中代理API请求配置代理后出现“无效的主机头”错误手动配置代理配置WebSocket代理在开发中使用HTTPS 在服务器上生成动态&lt;met

    React-AJAX-and-API:使用API​​的React应用程序的简单示例

    更改页面&lt;title&gt; 安装依赖项 导入组件 代码分割 添加样式表 后处理CSS 添加CSS预处理器(Sass,Less等) 添加图像,字体和文件 使用public文件夹 更改HTML 在模块系统之外添加资产 何时使用public文件夹 ...

    burger-basic::hamburger::couch_and_lamp:带有React 16的演示汉堡

    更改页面&lt;title&gt; 安装依赖项 导入组件 代码分割 添加样式表 后处理CSS 添加CSS预处理器(Sass,Less等) 添加图像,字体和文件 使用public文件夹 更改HTML 在模块系统之外添加资产 何时使用public文件夹 ...

    react-firebase-and-hosting:一个使用实时数据库保存和列出消息的简单示例

    更改页面&lt;title&gt; 安装依赖项 导入组件 代码分割 添加样式表 后处理CSS 添加CSS预处理器(Sass,Less等) 添加图像,字体和文件 使用public文件夹 更改HTML 在模块系统之外添加资产 何时使用public文件夹 ...

    SignUp-App-using-FireBase-Email-and-Password:使用FireBase电子邮件和密码注册应用程序

    更改页面&lt;title&gt; 安装依赖项 导入组件 代码分割 添加样式表 后处理CSS 添加CSS预处理器(Sass,Less等) 添加图像,字体和文件 使用public文件夹 更改HTML 在模块系统之外添加资产 何时使用public文件夹 ...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目源代码

    Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...

Global site tag (gtag.js) - Google Analytics