PerlerのRuby日記

Rubyとか

Sinatraのエラーハンドリング

http://www.sinatrarb.com/intro.html#Error%20Handling

こちらを見ると例外はRackオブジェクトのsinatra.errorに入っているとあるが、ブロック引数としても受け取ることができる。
(バージョン1.4.4で確認)

require "sinatra"

# developmentモードでもデバッグ表示させない
set :show_exceptions, false

# ブロック引数で例外オブジェクトを受け取る
error do |e|
  status 500
  # これでもできるけど
  #body env['sinatra.error'].message
  # これでもよい
  body e.message
end

get "/hoge" do
  raise "hoge"
end
$ bundle exec ruby app.rb
$ curl localhost:4567/hoge
hoge