如何使用Sinatra服务500页?

时间:2013-04-24 14:37:04

标签: sinatra rack

由于Sintra是Rack应用程序,我认为它可以使用Rack方式:

get '/' do
      result = true
      if result 
             ['200', {'Content-Type' => 'application/json'}, [{result:true}.to_  json]]
         else
             binding.pry
             ['500', {'Content-Type' => 'application/json'}, [{result:false}.to  _json]] 
         end    
end  

它不起作用,它总是返回500页面,变量是true还是false

2 个答案:

答案 0 :(得分:2)

如果您的应用中确实有这个文字代码:

{result:true}.to_  json # <<< whitespace that shouldn't be there

然后你的代码将有一个运行时异常(可能缺少方法to_unknown variable or method json),这就是你每次都得到500错误的原因。

答案 1 :(得分:0)

你可以像这样返回一个类似Rack的数组,但是数组的第一项需要特别是Fixnum,而不仅仅是在用{{{{}}解析时会产生数字的东西。 1}}。 Sinatra checks the type of the entry确定如何处理响应。

您的回复在“纯”Rack应用中有效,但在Sinatra中无效。可以说这是Sinatra中的一个错误,或者至少是says any valid Rack response is valid

的文档

Sinatra尝试将整个数组作为响应的主体返回(因为它响应to_i),但在尝试处理数组时失败,因为内容不是所有字符串。

要修复它,只需将响应中的状态代码从字符串更改为Fixnums:

each