一、出错类型

Exception

ActionController::UnknownController,

ActiveRecord::RecordNotFound

ActionController::RoutingError

AbstractController::ActionNotFound

二、解决方案

1、在你的app/controllers/application_controller.rbApplicationController里面用rescue_from捕捉他们,并且只在生产环境这样做

class ApplicationController < ActionController::Base
unless Rails.application.config.consider_all_requests_local
rescue_from Exception, with: lambda { |exception|
render_error 500, exception
}
rescue_from ActionController::UnknownController, ActiveRecord::RecordNotFound, with: lambda { |exception|
render_error 404, exception
}
end

2、然后加上render_error方法,用来渲染报错页面,你可以在这里做定制渲染

def render_error(status, exception)
respond_to do |format|
format.html { render template: "errors/error_#{status}", layout: 'layouts/application', status: status }
format.all { render nothing: true, status: status }
end
end

3、还是有一个问题,无法捕捉ActionController::RoutingErrorAbstractController::ActionNotFound,需要在config/route.rb里面最后捕捉

unless Rails.application.config.consider_all_requests_local
match '*not_found', to: 'errors#error_404'
end

4、加上errors_controller.rb,代码如下

class ErrorsController < ApplicationController
def error_404
@not_found_path = params[:not_found]
render_error 404, nil
end

三、开发环境下测试错误信息页面

因为开发环境下出现错误,都会呈现对应的错误信息,包括代码位置等。而不会弹出404或500页面,其实要在开发环境下,检测这些页面也是很方便的

# config/environments/development.rb
config.consider_all_requests_local = false

只需要把上面的设置从true改为false就可以了。

四、参考

http://blog.linjunhalida.com/blog/rails-customize-error-page/?utm_source=tuicool&utm_medium=referral

https://ruby-china.org/topics/21413

rails自定义出错页面的更多相关文章

  1. .htaccess设置自定义出错页面

    404错误可以这么写 ErrorDocument code error.php 如果是404错误,跳到文件error.php 其他常用错误页面写法(其中404错误有2种写法,上面一种,下面是通用错误定 ...

  2. haproxy实现自定义错误页面的内容

    现在利用haproxy实现自定义的haproxy的错误页面 我们现在实现自定义错误页面有以下的方法: 一种是自定义错误页面 haproxy.conf defaults errorfile 404 /e ...

  3. ASP.NET自定义错误页面

    ASP.NET自定义错误页面 ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件.Application_Error 事件以及应用程序配置文件 (Web.co ...

  4. Web---演示Servlet的相关类、下载技术、线程问题、自定义404页面

    Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代表用户的 ...

  5. ASP.NET MVC 自定义错误页面心得

    自定义错误页面的目的,就是为了能让程序在出现错误/异常的时候,能够有较好的显示体验. 所以,首先要先了解,我们可以在哪里捕获异常. 当程序发生错误的时候,我们可以在两个地方捕获: Global里面的A ...

  6. MVC自定义错误页面

    MVC异常处理主要有三种方案:1.基于HandleErrorAttribute重写OnException方法:2.基于Global.apsx添加Application_Error方法:3.直接在Web ...

  7. C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路

    C#不用union,而是有更好的方式实现   用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...

  8. 在Tomcat中配置404自定义错误页面详解

    这篇文章主要介绍了在Tomcat中配置404自定义错误页面全解,需要的朋友可以参考下 一直使用tomcat,今天想到一个问题,自定义404错误页面, 为了获得很好的用户感受,是不应当向用户暴露404这 ...

  9. Spring Security 自定义登录页面

    SpringMVC + Spring Security,自定义登录页面登录验证 学习参考:http://www.mkyong.com/spring-security/spring-security-f ...

随机推荐

  1. HBase-修改表结构

    HBase修改表结构 package com.hbase.HBaseAdmin; import java.io.IOException; import org.apache.hadoop.conf.C ...

  2. HDFS-文件读取API

    package com.zhen.hdfs; import java.io.IOException; import java.io.InputStream; import java.net.URI; ...

  3. BZOJ3671/UOJ6 [Noi2014]随机数生成器

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  4. wab框架

    http协议 一.http简介        1.HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等).       2.HTTP是一个属于应用层的面向对象的协 ...

  5. neutron 虚拟机网络问题调试

    1. Security Group全部打开,这是最基本的,但是很多人容易忘记 2. 通过界面查看虚拟机的log,也可以在compute节点上查看console.log文件,看看里面是否有DHCP获取I ...

  6. jsonp 解决跨域传输

    JSONP是JSON with Padding的略称.它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅 ...

  7. 解决:xampp中Apache, MySql, Filezilla端口占用问题

    读 静觅 的python博客,学到requests库的用法,看到“”如果想请求JSON文件,可以利用 json() 方法解析 ”这里迷惑了: 我写了a.json文件放在本地,却不能被python调用, ...

  8. 《Advanced Bash-scripting Guide》学习(十三):引用变量的两个例子

    本文所选的例子来自于<Advanced Bash-scripting Gudie>一书,译者 杨春敏 黄毅 例1. 使用""可以防止单词分割,将变量看成一个整体,没有& ...

  9. poj2114树分治

    题意:给你一棵树,每条边有权值,求有没有一条链使得权值和为k 题解:和上一题类似,依旧是树分治,只是我们储存结果的时候是判断加起来为k的点对数,刚开始本来想用map存答案,结果就t了,后来用了vect ...

  10. mac 不再接受预览版提示

    系统偏好设置 - App Store - 点“电脑已设置为接收预发布的软件更新种子”的“更改”按钮 - 点“不显示预发布更新”.