2013-05-14 54 views
3

我在RoR3應用程序內有一個Sinatra應用程序。在Sinatra應用程序返回gzip內容

我定義了一個西納特拉模塊,並加入我的RoR3路由的以下重定向

match '/v2', MySinatraModule, :anchor=>false 

我的末日應用程序是內部服務的所有服務/ V2/*,但他們沒有被gzip壓縮。 我嘗試在config.ru中添加「使用Rack:Deflater」,但由於它通過RoR3,因此無法正常工作。這是一個json服務,所以它返回字符串。

我試過使用GZip :: ZLibWriter,它壓縮輸出,但不會解釋爲在另一邊進行gzip壓縮。

任何幫助?

回答

2

有兩件事想到試試。

首先,不要使用RoR作爲路由器,讓Rack處理它。有幾種方法可以做到這一點,而不是,最簡單的大概是:

# config.ru 
require 'sinatra_module' 
require 'rails_app' 

map "/" do 
    run RailsApp 
end 

map "/v2" do 
    use Rack::Deflater # you might want to put this in the Sinatra app. 
    run MySinatraModule 
end 

你可以嘗試是Content-Encoding頭設置爲"gzip",或者,如果不工作,你可以嘗試設置Content-type的另一件事頭到"application/x-gzip"(我更改類型標題更可疑)。 Rack::Deflater應該爲你處理。

+0

我該如何啓動這個服務器? 「rails s」? – Tony 2013-05-15 12:47:25

+0

@Tony試試'rackup config.ru',或者其中每一件事的路徑。 – iain 2013-05-15 17:28:55

+0

我試過用rails s,它似乎工作正常。它會在Heroku上運行嗎?我需要嘗試。 – Tony 2013-05-15 20:41:07

相關問題