rails自定义出错页面

一、出错类型

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

时间: 2024-08-08 13:56:26

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

.htaccess设置自定义出错页面

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

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

Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代表用户的请求. ServletResponse – 代表用户的响应. HttpSession – 代表用户的一次会话. 本篇博客演示:ServletConfig类 和 ServletContext 类(网页点击量统计,留言板和图片下载技术(其他类型文件类似)) ServletConfig: 它包含了Serv

Apache服务器自定义404页面的两种方法以及.htaccess的重要命令总结

Apache服务器自定义404错误页面有两种方法: 第一种方法最简单,直接在Apache的httpd.conf下进行配置修改命令,修改的内容请参看.htaccess命令写法中的自定义错误页面 第二种方法可以在.htaccess文件中配置命令,具体操作请参看.htaccess命令写法中的自定义错误页面 .htaccess使用方法总结 1 . 首先让的本地APACHE服务器器允许.htaccess修改 打开httpd.conf (1) Options FollowSymLinks AllowOver

MVC自定义错误页面

MVC异常处理主要有三种方案:1.基于HandleErrorAttribute重写OnException方法:2.基于Global.apsx添加Application_Error方法:3.直接在Web.Config中配置.现基于上述思路,测试了下面三种自定义错误页面的处理方法(主要侧重于显示异常信息,便于快速找到代码中的异常来源),以便后续查阅.不足之处,还请指教! 1.直接在web.config的<system.web>节点下加入<customErrors mode="On&

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

现在利用haproxy实现自定义的haproxy的错误页面 我们现在实现自定义错误页面有以下的方法: 一种是自定义错误页面 haproxy.conf defaults errorfile 404 /etc/haproxy/errors/404.http errorfile 503 /etc/haproxy/errors/503.http 还有一种方法就是错误页面的跳转: 当出现错误的时候,我们跳转到指定的链接地址 frontend web_server    bind *:80    defau

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

自定义错误页面的目的,就是为了能让程序在出现错误/异常的时候,能够有较好的显示体验. 所以,首先要先了解,我们可以在哪里捕获异常. 当程序发生错误的时候,我们可以在两个地方捕获: Global里面的Application_Error . HandleErrorAttribute 中的OnException.(需要新建一个类,继承HandleErrorAttribute) 那我们到底应该在哪里处理错误好呢?下面我来给大家说说他们的区别. Application_Error 程序中发生的所有异常,都

【转载】tp自定义提示信息页面

原文链接 [TP笔记]ThinkPHP自定义错误页面.成功页面及异常页面 2014/06/20 | ThinkPHP | 13 条评论 | (5评) | 看了前面分享的一篇<什么是真正的程序员?>,觉得自己离这个目标还差的很远,所以要抓紧朝着这个方向前进.作为一名PHP小码农,掌握一种框架是必须的.所以今天开始我们就从国产PHP框架 ThinkPHP 开始学起~ 为什么会选择 ThinkPHP 呢?首先,作为一款国产PHP框架,文档肯定比国外那些框架要丰富的多,而且容易看懂:其次,ThinkP

asp.net自定义错误页面

ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件.Application_Error 事件以及应用程序配置文件 (Web.config). 如果您不调用 Server.ClearError 或者捕获 Page_Error 或 Application_Error 事件中的错误,则将根据 Web.config 文件的 <customErrors> 部分中的设置处理错误.在 <customErrors> 部分,可将重定向页指定为默认的错误页 (

MVC4 自定义错误页面(三)

一.概述 MVC4框架自带了定义错误页,该页面位于Shared/Error,该页面能够显示系统未能捕获的异常,如何才能使用该页面: 二.使用步骤: 1.配置WebConfig文件,在System.Web节点下加上 <customErrors mode="On"  defaultRedirect="~/Shared/Error" /> 翻阅一些大神写的博客,在他们的博客中指出defaultRedirect是指向错误页面的URL,可是经过本人测试的时候,发现