如何自定义我的500.html错误页面? (Rails)

问题描述:

所以,我已经做了以下几点(见下面的代码)和404.html.erb页面工作得很好!但是,由于某些原因,500 .html.erb页面不会加载,因此它会保持默认回到公用文件夹中的500.html页面。所以我删除了这个500.html文件,现在当出现异常时,它只是一个空白的白屏。如何自定义我的500.html错误页面? (Rails)

我在做什么错?为什么自定义404页面可以工作? (使用Rails 4 BTW)

见下面我的代码:

errors_controller.rb

class ErrorsController < ApplicationController 
    def error_404 
    @not_found_path = params[:not_found] 
    end 

    def error_500 
    end 
end 

application_controller.rb

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::RoutingError, ActionController::UnknownController, ::AbstractController::ActionNotFound, ActiveRecord::RecordNotFound, with: lambda { |exception| render_error 404, exception } 
end 
... 

private 

    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 

的意见/错误/ error_404。 html.erb:

<div class="errorbox"> 
<h1><%= image_tag('errorimage.png') %>Oops! This page couldn't be found.</h1> 

<p class="leftbox"><%= link_to 'Return to previous page', :back %></p> 

<p><%= link_to 'Report a problem', contact_us_path %></p> 

</div> 

的意见/错误/ error_500.html.erb

<div class="errorbox"> 
<h1><%= image_tag('errorimage.png') %>Oops! Something went wrong.</h1> 

<p class="leftbox"><%= link_to 'Return to previous page', :back %></p> 

<p><%= link_to 'Report a problem', contact_us_path %></p> 

</div> 

我怎样才能获得时,有一个服务器错误500.html.erb要显示的习惯吗?

+0

您在应用程序控制器中调用了'render template:“errors/error _#{status}”',并且与errors_controller中的操作名称相匹配,但您的视图文件未被命名为“error_404.html.erb”和“ error_500.html.erb”。我看不出这两个页面是如何正确渲染的。也许我刚刚度过了漫长的一天。 此外,application_controller.rb中的'format.all {render nothing:true,status:status'行在结尾处缺少'}'。 – digijim 2014-09-18 22:00:56

+0

500错误可能发生在Rails之外......您可能想要生成这些页面并将其缓存到public/500.html等,并配置您的Web服务器(nginx/apache)以使用它们... – 2014-09-18 23:54:02

先写一个错误路线routes.rb

get "500", to "errors#error_500", code: "500" 

然后使用相应的控制器方法和模板来处理它。