rails4を使用したカスタムエラーページの作成方法です。public配下のデフォルトエラーページでも動作に問題はありませんが、エラーページを作成したほうがSEO的には良いので、作成することをお薦めします。
環境
- rails4.1.2
- Foundation5
はじめに
今回の対応で有効なrailsのバージョンはrails4.1以上です。railsのバージョンが4.1より低い場合は、バージョンをあげるか、他のやり方を選択する必要があります。
コントローラーの作成
エラーをハンドリングするコントローラーを作成します
bundle exec rails generate controller errors not_found_error internal_server_error
routes.rb
エラー画面は本番(production)環境にだけに適用します。
開発時は、開発(development)環境でカスタムエラー画面を確認するときだけコメントアウトします。でないとエラーが画面に表示されなくなって、開発効率が落ちます。
もちろん、コミットするときはコメントアウトを外します。
#if Rails.env.production? get '404', :to => 'errors#page_not_found' get '422', :to => 'errors#server_error' get '500', :to => 'errors#server_error' #end
ErrorsControllerの実装
layoutやtemplateは作成しているWEBアプリに応じて自分で用意します
# coding: utf-8 class ErrorsController < ApplicationController def page_not_found respond_to do |format| format.html { render template: 'errors/not_found_error', layout: 'layouts/web/application', status: 404 } format.all { render nothing: true, status: 404 } end end def server_error respond_to do |format| format.html { render template: 'errors/internal_server_error', layout: 'layouts/web/application', status: 500 } format.all { render nothing: true, status: 500} end end end
config/application.rb
config.exceptions_app = self.route
config/production.rb, config/development.rb
config.consider_all_requests_local = false
カスタムエラー画面がdevelopment環境で確認できたら、上記のdevelopment.rbはtrueに変更します。でないと、開発環境でもカスタムエラー画面に遷移するので、デバッグ開発がやりずらくなってしまいます。
全ての設定が完了したら、サーバーを再起動して、routesに設定されていないurlに遷移してみてください。カスタムしたエラーページが表示されるはずです。
以上
0 件のコメント:
コメントを投稿