私のシナトラアプリで次のことを行いました。
disable :show_exceptions
disable :raise_errors
error do
haml :error, :locals => {:error_message => request.env['sinatra.error'].to_s}
end
get '/error' do
raise "ERROR!!"
end
私が訪問した場合/error
を取得します500 - Internal Server Error
応答コード。これは神であり、望んでいます。しかし、どうすればコードを404や501などに変更できますか?
答え:
disable :show_exceptions
disable :raise_errors
get '/error' do
halt(404,haml(:error, :locals => {:error_message => request.env['sinatra.error'].to_s}))
end
raise 404
のようなものは、raise ZeroDivisionError
と同じようにエラーを発生させ、アプリが500内部サーバーエラーをスローする原因になります。特定のエラーを返す最も簡単な方法は、status
を使用することです
get '/raise404' do
status 404
end
body
を使用してカスタム応答本文を追加することもできます
get '/raise403' do
status 403
body 'This is a 403 error'
end
これをブロックで使用します
[。 erb:my_template
エラーが発生した場合、私のログは次のようになります
HTTP/1.1 "500 13 0.1000
raise "ERROR!!"
の代わりに、ステータスコードの後にオプションのステータスメッセージを付けてerror 404
またはerror 501
を実行してみてください。
更新:たとえば、エラーハンドラーをerror 400..501 do...
として定義した場合、error 501 "ERROR!!"
ルートで"/error"
を使用できます。これもあなたの「エラー!!」 env['sinatra.error'].message
のメッセージ。