web-dev-qa-db-ja.com

シナトラでカスタムエラーコードを発生させる方法は?

私のシナトラアプリで次のことを行いました。

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
27
le_me

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
23
Sean Redmond

これをブロックで使用します

[。 
 erb:my_template 

エラーが発生した場合、私のログは次のようになります
HTTP/1.1 "500 13 0.1000

5
germanlinux

raise "ERROR!!"の代わりに、ステータスコードの後に​​オプションのステータスメッセージを付けてerror 404またはerror 501を実行してみてください。

更新:たとえば、エラーハンドラーをerror 400..501 do...として定義した場合、error 501 "ERROR!!"ルートで"/error"を使用できます。これもあなたの「エラー!!」 env['sinatra.error'].messageのメッセージ。

2
jboursiquot