Railsでの開発中に本番同様のエラー画面が表示される様に設定を変更する方法について。
設定方法
config/environments/development.rb
# Show full error reports. config.consider_all_requests_local = true
これを
# Show full error reports. config.consider_all_requests_local = false
こうするだけ。
config/environments
配下には各環境ごとの設定ファイルが置かれていて、development.rb
以外にもproduction.rb
やtest.rb
などがある。
どのファイルにおいてもRails.application.configure do...end
の中に各種設定に関する記述がされていて、例えば今回のエラー画面の他にも、キャッシュストアに何を使用するかとか、mailerの設定とか、環境ごとに指定することができる。
忘れずにやること
config配下の設定は変更されてもサーバー側が検知してくれるわけではないので、いじったあとはサーバーを起動し直さないと変更が反映されない。
$ bin/rails s
一度サーバーを切ってからまた立ち上げればOK。
...ということは、もちろんここの変更はgitにプッシュはできないわけだけど、開発のたびにtrueやfalseを切り替える必要もなく、変更した状態でサーバーを起動したらあとは元に戻しちゃえば良いのでとても楽。
エラーが起こった時の挙動
開発環境でエラーが発生すると、config.consider_all_requests_local = true
だった時にはエラー詳細画面がブラウザに出ていたが、false
に変えると「お客様向け」のエラー画面が出るようになる。
デフォルトは多分こんなやつ。
そうするとエラーの詳細が確認できないじゃん!!...ではなく、ログを見れば良い。
というか、こうした方が普段からログを見る癖がつくので多分良い。
ログを見ると、リクエストが走った時にどのテンプレートがrenderされて、オブジェクトの保存や編集をした時にどんなSQLが発行されて、みたいなことをきちんと理解できるようになるので、多分こっちの方が良い。N+1とかも気がつきやすい。
ちなみに
さっきのエラー画面はサーバーが用意してくれているとかではなく、これもRailsアプリケーションの中に用意されていて、そのファイルが呼ばれているだけ。
public
配下にある500.html
がそう。
public/500.html
<!DOCTYPE html> <html> <head> <title>We're sorry, but something went wrong (500)</title> <meta name="viewport" content="width=device-width,initial-scale=1"> <style> <!-- 長いので省略 --> </style> </head> <body> <!-- This file lives in public/500.html --> <div class="dialog"> <div> <h1>We're sorry, but something went wrong.</h1> </div> <p>If you are the application owner check the logs for more information.</p> </div> </body> </html>
ちょっとスタイル変えたいとか文言変えたいって時はここをいじれば良し。
ちなみに、静的ファイルオンリーなのでテンプレートエンジンは使えない。データを持たせることはできないので注意。(HTML久しぶりに見た)