このチュートリアルを使用して、カスタム 404 および 500 ページがセットアップされた Rails サーバーがあります。
http://ramblinglabs.com/blog/2012/01/rails-3-1-adding-custom-404-and-500-error-pages
うまく機能し、あらゆる種類のパスに対して 404 をスローしますが、en/foo.png、en/foo.pdf、en/foo.xml などのサフィックス付きパスにアクセスしようとすると、内部サーバー エラー 500 が生成されます。
しかし、en/file.foo のようなものは 404 をスローします。したがって、有効なサフィックスのみが 500 をスローします。
routes.rb の終わり:
if Rails.application.config.consider_all_requests_local
match '*not_found', to: 'errors#error_404'
end
application_controller.rb
unless Rails.application.config.consider_all_requests_local
rescue_from Exception, with: :render_500
rescue_from ActionController::RoutingError, with: :render_404
rescue_from ActionController::UnknownController, with: :render_404
rescue_from ::AbstractController::ActionNotFound, with: :render_404
rescue_from ActiveRecord::RecordNotFound, with: :render_404
end
protected
def render_404(exception)
@not_found_path = exception.message
respond_to do |format|
format.html { render template: 'errors/error_404', layout: 'layouts/application', status: 404 }
format.all { render nothing: true, status: 404 }
end
end
def render_500(exception)
logger.fatal(exception)
respond_to do |format|
format.html { render template: 'errors/error_500', layout: 'layouts/application', status: 500 }
format.all { render nothing: true, status: 500}
end
end
表示される 500:
Missing template errors/error_404 with {:locale=>[:de, :en], :formats=>[:png], :handlers=>[:erb, :builder, :coffee, :arb, :haml]}