2013-04-24 10 views
2

由於辛特拉是一個機架的應用程序,我認爲它可以使用機架的方式:如何使用Sinatra服務500頁?

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頁面,該變量是truefalse

回答

2

如果您其實在你的應用程序這個文字代碼:

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

那麼你的代碼將有一個運行時異常(可能丟失方法to_unknown variable or method json),這就是爲什麼你每次都會遇到500錯誤。

+0

這實際上會產生一個SyntaxError在這種情況下:'語法錯誤:(IRB):2:語法錯誤,意想不到的tIDENTIFIER,期待']'而不是運行時錯誤,所以服務器甚至不會啓動,而不是產生'500'錯誤。 – matt 2013-05-17 21:43:30

0

您可以返回類似Rack的數組作爲此類響應,但該數組的第一項必須具體爲Fixnum,而不是僅當使用to_i進行分析時纔會產生數字。 Sinatra checks the type of the entry確定如何處理響應。

您的回覆將在「純粹」機架應用中有效,但不在Sinatra中。可以說這是Sinatra中的一個bug,或者至少是says any valid Rack response is valid的文檔。

Sinatra嘗試返回整個數組作爲響應的主體(因爲它響應爲each),但由於內容不是全部字符串而嘗試處理數組時失敗。

要修復它只是從字符串更改您的回覆狀態代碼Fixnums:

[200, {'Content-Type' => 'application/json'}, [{result:true}.to_json]]