Как повысить код ошибки в синатра?
В моем приложении синатра я сделал следующее:
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
Ответы
Ответ 1
Что-то вроде raise 404
вызывает ошибку, точно так же, как raise ZeroDivisionError
, что заставляет ваше приложение бросать 500 Internal Server Error. Самый простой способ вернуть конкретную ошибку - использовать status
get '/raise404' do
status 404
end
Вы также можете добавить настраиваемое тело ответа с помощью body
get '/raise403' do
status 403
body 'This is a 403 error'
end
Ответ 2
Я использую это в блоке
if 'condition' then
do something
else
halt 500 , "error message"
end
#only without error
erb :my_template
В случае ошибки мой журнал выглядит так:
HTTP/1.1 "500 13 0.1000
Ответ 3
Вместо raise "ERROR!!"
попробуйте просто выполнить error 404
или error 501
с дополнительным сообщением о статусе после кода состояния.
Обновление:
Если вы определяете свой обработчик ошибок как
error 400..501 do...
например, вы можете использовать error 501 "ERROR!!"
в своем маршруте "/error"
. Это также положит вашу "ОШИБКУ!!". сообщение в env['sinatra.error'].message
.