概要
前回 not_found を使ってルーティングしていないパスのエラーハンドリングをしました
今回は予期しないエラーが発生したときにすべてのエラーをハンドリングすることができる方法を紹介します
環境
- macOS 10.13.2
- Ruby 2.4.1p111
- Sinatra 2.0.0
サンプルコード
- vim error.rb
require 'sinatra'
set :show_exceptions, false
get '/' do
raise
end
error do
'error'
end
これでアクセスするとクライアント側にはステータスコード 500 で error という文字列だけが返ります
サーバ側には Ruby のエラースタックトレースが表示されます
set :show_exceptions, false
これを指定しないとクライアント側にもエラースタックトレースが表示されてしまい本来返却したいレスポンスボディにならないので必ず設定してください
サンプルコード2
- vim error2.rb
require 'sinatra'
require './my_class.rb'
set :show_exceptions, false
get '/' do
mc = MyClass.new
mc.error
end
error do
'error'
end
- vim my_class.rb
class MyClass
def error
a = nil
a.each {}
end
end
MyClass では必ずエラーが発生します
これを Sinatra のコントローラ側でコールしてもちゃんと error が拾ってくれます
最後に
Sinatra で 500 エラーをハンドリングしてみました
とりあえずこれを入れておけば Ruby のエラースタックトレースが返ることはなくなると思います
0 件のコメント:
コメントを投稿