如何在sinatra中引发自定义错误代码?

le_*_*_me 27 ruby error-handling sinatra

我在我的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
Run Code Online (Sandbox Code Playgroud)

如果我访问/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
Run Code Online (Sandbox Code Playgroud)

Sea*_*ond 23

像是一样raise 404会引发错误raise ZeroDivisionError,这会导致您的应用程序抛出500内部服务器错误.返回特定错误的最简单方法是使用status

get '/raise404' do
    status 404
end
Run Code Online (Sandbox Code Playgroud)

您还可以添加自定义响应正文 body

get '/raise403' do
    status 403
    body 'This is a 403 error'
end
Run Code Online (Sandbox Code Playgroud)

  • 得到它了!使用```halt STATUS,BODY```;) (9认同)

ger*_*nux 5

我在块中使用它

如果“条件”那么 
   做点什么
其他 
   停止500,“错误消息”
结束 
#只有没有错误
erb:my_template

如果发生错误,我的日志就是这样的
HTTP / 1.1“ 500 13 0.1000