酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

Rambulance Rails 4.2時代の簡単 404/500エラー対応

最近作っているRailsアプリで、404/500エラーの対応をしている時に知ったgem 『yuki24/rambulance』 の紹介です。

一言で言うと、ものすごく簡単にRailsのエラーハンドリングを行ってくれつつ、エラーページを構築できるgemです。


インストール手順

いつもどおりGemfileに以下を追加。

1
2
# Error handling
gem 'rambulance'

そして以下のコマンドを実行してインストールしてください。(pathは適宜変更)

1
bundle install --path vendor/bundle --jobs=4

環境設定

エラーページのviewや、設定ファイルを生成してくれます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
rails g rambulance:install

# generating templates:
#       create  app/views/errors/bad_request.html.haml
#       create  app/views/errors/forbidden.html.haml
#       create  app/views/errors/internal_server_error.html.haml
#       create  app/views/errors/not_found.html.haml
#       create  app/views/errors/unprocessable_entity.html.haml
#       create  app/views/errors/bad_request.json.jbuilder
#       create  app/views/errors/forbidden.json.jbuilder
#       create  app/views/errors/internal_server_error.json.jbuilder
#       create  app/views/errors/not_found.json.jbuilder
#       create  app/views/errors/unprocessable_entity.json.jbuilder
#
# generating initializer:
#       create  config/initializers/rambulance.rb

エラーごとに表示するページを変更

エラーごとに表示するページを変更するには、config/initializers/rambulance.rbを適宜変更してください。 また、個人的にlayoutはnilにしておくほうがはまりにくいと思います!

1
2
3
4
5
6
7
8
9
10
# エラーページのハンドリング方法はこんな感じ
config.rescue_responses = {
  # "ActiveRecord::RecordNotUnique" => :unprocessable_entity,
  # "CanCan::AccessDenied"          => :forbidden,
  # "Pundit::NotAuthorizedError"    => :forbidden,
  # "YourCustomException"           => :not_found
}

# エラーページのレイアウトはnilにしておくのがオススメ
config.layout_name = nil

開発環境での確認方法

config/environments/development.rbに以下を追記したら、開発環境でエラーが出た際にrambulanceのエラー画面が表示されます。

1
2
3
4
# --------------------------------
# Error Handling
# --------------------------------
config.consider_all_requests_local = false

エラー処理を独自実装したい場合

もしエラー処理を独自実装したい場合は以下のコマンドでエラー処理用のひな形を生成してくれます。

1
2
rails g rambulance:exceptions_app
#  create  app/handlers/exceptions_app.rb

ちなみに、最初はエラー通知をAirbrakeで自分でコードを書いて通知させていたんですが、作者の@yuki24 から、Airbrakeのミドルウェアがやってくれるから、自作しなくていいという話を教えてもらいました。有難うございます!

まだ、使い始めて日が浅いので間違い等あればコメントよろしくお願いします!

変更来歴

(2015-01-31 11:55) 新規作成 (2015-02-01 11:30) Airbrakeの自作通知ハンドラーを削除

おすすめの書籍