27

sinatraアプリで次のことを行いました。

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
4

3 に答える 3

25

のようなもの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
于 2012-11-29T04:12:48.047 に答える
6

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

'条件'の場合
   何かをする
そうしないと
   500を停止、「エラーメッセージ」
終わり
#エラーなしでのみ
erb:my_template

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

于 2014-05-10T14:01:52.313 に答える
2

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

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

于 2012-11-27T17:27:06.930 に答える