Padrinoでエラーハンドリング

Padrino (Sinatra) はerrorメソッドを使ってエラーハンドリングができる。
errorメソッドはステータスコード (Integer) か例外クラスを渡す。

class MyApp < Padrino::Application
  # ...

  error 404 do
    "404 Not Found"
  end

  error ActiveRecord::RecordNotFound do
    halt 404
  end
end

ちなみにPadrinoはエラー処理がもうちょっと柔軟にできて、コントローラのスコープごとにエラー処理を定義できる。
スコープというのはPadrino.controllerに渡す名前のこと。

MyApp.controller :posts do
  error 404 do
    "Post is not found"
  end
end

MyApp.controller :authors do
  error 404 do
    "Author is not found"
  end
end

しかし、開発環境 (Padrino.env == :development) だとSinatra由来のリッチなスタックトレースを吐くようになっていて、このスタックトレースを見るオプション (show_exception) が有効だと、例外クラスを指定してエラーハンドリングが効かなくなる。切るとちゃんと動く。

class MyApp < Padrino::Application
  set :show_exception, true
end