Rails で rambulance を使ってエラー種別ごとに動的にエラーページを切り替える
はじめに
yuki24/rambulance で動的なエラーページを表示する方法についてまとめた。
TL;DR
Gemfileにgem "rambulance"追加 →bundle(orbundle install) でインストールrails g rambulance:installでセットアップconfig/initializers/rambulance.rbに"例外" => "対応ファイル"のペアを記述app/views/errors/対応ファイル.html.xxxにエラーページの内容を記述/rambulance/対応ファイルにアクセスすると、エラーページの内容が確認できる
目次
環境・条件
1 | $ sw_vers |
詳細
rambulance について
動的にエラーページを生成できる gem。以下が嬉しいポイント。
- エラー内容ごとに表示ページを変更できる
- Ruby, Rails のメソッドが使える
image_taglink_toroot_path- etc
- アプリケーションの既存資産が使える
- asset ファイル
- テンプレートファイル(ヘッダー、フッター)
- etc
- 難しいことをせずに
ActionController::RoutingErrorを捕捉できる
gem インストール
Gemfile に gem "rambulance" を追加
1 | ... |
bundle (or bundle install) でインストール
1 | $ bundle |
初期ファイルの生成
rails g rambulance:install で設定ファイルなどを生成。必要に応じて bundle exec を付与。
1 | $ rails g rambulance:install |
以下のファイルが生成される。
app/views/errors: エラー別の表示ファイルapp/views/layouts/error.html.xxxx: エラー用のレイアウトファイル(app/views/layouts/application.html.slimがコピーされる)config/initializers/rambulance.rb: 設定ファイル、エラーと表示内容のマッピングなど
例外と表示内容のマッピング
config/initializers/rambulance.rb を編集する。config.rescue_responses がメインの設定箇所。
rescue_responses
"ActionController::RoutingError" => :not_found と記述することで、ActionController::RoutingError 発生時に app/views/errors/not_found.html.xxxx を表示してくれるようになる。
1 | Rambulance.setup do |config| |
config.rescue_responses のどれにも該当しない場合には、app/views/errors/internal_server_error.html.xxxx が使われる。
layout_name
config.layout_name = "hoge" とすると、レイアウトファイルとして app/views/layouts/hoge.html.xxxx が使われる。
view_path
config.view_path = "my_errors" とすると、ビューファイルを ``app/views/my_errors/` から探すようになる。
エラーページの確認
通常、development 環境だと、エラー発生時にはスタックトレースなどの情報が表示されるため、実際に表示されるエラーページを確認することはできない。
config/environments/development.rb で config.consider_all_requests_local = false とすることで確認ができる。
1 | Rails.application.configure do |
しかし、これすらも面倒だし、下手したらエラーページの確認後に設定を削除し忘れる可能性がある。
rambulance では http://localhost/rambulance/not_found のように /rambulance/xxxx にアクセスすることで、設定変更や例外の意図的な生成なしに直接エラーページを確認できる。
参考: Local Development - yuki24/rambulance
まとめ
Gemfileにgem "rambulance"追加 →bundle(orbundle install) でインストールrails g rambulance:installでセットアップconfig/initializers/rambulance.rbに"例外" => "対応ファイル"のペアを記述app/views/errors/対応ファイル.html.xxxにエラーページの内容を記述/rambulance/対応ファイルにアクセスすると、エラーページの内容が確認できる
その他・メモ
high_voltage を使っているアプリで、以下のやり方を試したら既存の静的ページが表示されなくなったが、rambulance 使うと簡単にクリアできたので助かった。
参考文献
- yuki24/rambulance: Simple and safe way to dynamically render error pages or JSON responses for Rails apps
- Railsの ActionController::RoutingError は ApplicationController での rescue_from で捕まえられない - Qiita
- rambulance Rails 4.2時代の簡単404/500エラー対応 | 酒と涙とRubyとRailsと
- 【動的VS静的】Railsの404/500エラーページ 静的の勝利 - 珈琲駆動開発
- [Rails]404/500などのエラーページって結局どうすればいいの? - Qiita
- Railsで404エラーメッセージを出すために - Qiita
- Railsアプリの例外ハンドリングとエラーページの表示についてまとめてみた - Qiita
- Railsの404,500エラーページをカスタマイズ - Qiita
- Railsで404/500エラーの処理 - Qiita
- Dynamic Rails Error Pages | mattbrictson.com
- Error Handling in Rails — The Modular Way - Rails, Ember & Beyond - Medium
関連記事
- Rails で high_voltage を使って静的ページを作成する
- Rails で favicon の設定
- Rails で OGP を content_for で設定する方法
- Rails で簡易的な年齢認証(年齢確認)を導入する方法
- Rails で既存の DB を利用するアプリケーションの作成方法(DB 参照のみ)
- Rails で Devise と論理削除を両立する方法
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア