Подтвердить что ты не робот

Как повысить код ошибки в синатра?

В моем приложении синатра я сделал следующее:

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
4b9b3361

Ответ 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.