在Sinatra应用程序上返回gzip压缩内容

时间:2013-05-14 15:45:14

标签: json ruby-on-rails-3 web-services sinatra gzip

我在RoR3应用程序中有一个Sinatra应用程序。

我定义了一个Sinatra模块,并在我的RoR3路由中添加了以下重定向

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

我的Sinatra应用程序正在服务/ v2 / *中的所有服务,但它们没有被gzip压缩。 我尝试在config.ru中添加“使用Rack:Deflater”,但由于它通过RoR3,因此无效。它是一个json服务,所以它返回字符串。

我尝试使用GZip :: ZLibWriter并压缩输出,但在另一端不被解释为gzip压缩。

任何帮助?

1 个答案:

答案 0 :(得分:2)

有两件事需要考虑尝试。

首先,让Rack处理它,而不是使用RoR作为路由器。有几种方法可以做到这一点,最简单的可能是:

# 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应该为你处理。