Sinatraのエラーハンドリング
Sinatraには not_foundハンドラとerrorハンドラの2つのハンドラが用意されています。
not_foundハンドラは404エラーを補足するためのエラーハンドラです。
errorハンドラは様々なエラーを補足するためのエラーハンドラです。
Not Foundハンドラ
not_foundハンドラは404エラーを補足するためのエラーハンドラです。Sinatra::NotFound
が発生したとき、またはステータスコードが404のときは not_foundハンドラが実行されます。
1 | not_found do |
Errorハンドラ
errorハンドラは様々なエラーを補足するためのエラーハンドラです。
例外オブジェクトにはRack変数の sinatra.error でアクセスできます。
1 | error do |
以下の設定をすると、environmentがDevelopmentのときにブラウザにスタックトレースを表示することができます。
1 | set :show_exceptions, :after_handler |
エラー固有の制御もできます。
MyCustomeErrorのエラーハンドリングをしたいときは以下のように定義します。
1 | error MyCustomError do |
raiseでエラーを発生させるようにしてみます。
1 | get '/' do |
ステータスコードを指定してエラーハンドリングを行う方法もあります。
1 | error 403 do |
レンジの指定も可能です。
1 | error 400..510 do |
errorハンドラにerrorコードを指定しなかった場合は何を補足するのか
errorハンドラにerrorコードを指定しなかった場合は、Exceptionを補足します。
1 | def error(*codes, &block) |
その他の例外は補足しません。
例えばExceptionのサブクラスであるStandardErrorは拾ってくれません。
ですので、明示的にerrorコードを指定しておいたほうがよいです。
1 | error 500 do |