Json 在Sinatra应用程序上返回Gzip内容

Json 在Sinatra应用程序上返回Gzip内容,json,ruby-on-rails-3,web-services,sinatra,gzip,Json,Ruby On Rails 3,Web Services,Sinatra,Gzip,我在RoR3应用程序中有一个Sinatra应用程序 我定义了一个Sinatra模块,并在我的RoR3路由中添加了以下重定向 match '/v2', MySinatraModule, :anchor=>false 我的Sinatra应用程序正在为/v2/*中的所有服务提供服务,但它们没有被gzip下载。 我尝试在config.ru中添加“use Rack:Deflater”,但由于它通过了RoR3,所以无法工作。它是一个json服务,因此返回字符串 我试着使用GZip::ZLibWrit

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

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

match '/v2', MySinatraModule, :anchor=>false
我的Sinatra应用程序正在为/v2/*中的所有服务提供服务,但它们没有被gzip下载。 我尝试在config.ru中添加“use Rack:Deflater”,但由于它通过了RoR3,所以无法工作。它是一个json服务,因此返回字符串

我试着使用GZip::ZLibWriter,它压缩了输出,但在另一端没有被解释为GZip


有什么帮助吗?

我想到两件事可以试试

首先,不要使用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

您可以尝试的另一件事是将
内容编码
标题设置为
“gzip”
,或者,如果这不起作用,您可以尝试将
内容类型
标题设置为
“application/x-gzip”
(不过,我对更改类型标题持怀疑态度)
Rack::Deflater
应该为您处理这个问题。

我如何启动这个服务器?“rails s”?@Tony Try
rackup config.ru
,或者任何指向这些东西的路径。我尝试使用rails s,它似乎工作正常。对Heroku有效吗?我需要试试。@Tony应该像运行Rack应用程序一样运行它。顺便说一句,很高兴你的工作顺利。