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_tag
link_to
root_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 で、初期値の設定と選択状態のクリア