如何自定义我的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要显示的习惯吗?
答
先写一个错误路线routes.rb
get "500", to "errors#error_500", code: "500"
然后使用相应的控制器方法和模板来处理它。
您在应用程序控制器中调用了'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
500错误可能发生在Rails之外......您可能想要生成这些页面并将其缓存到public/500.html等,并配置您的Web服务器(nginx/apache)以使用它们... – 2014-09-18 23:54:02