在Sinatra应用程序中返回经过gzip压缩的内容

3

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

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

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

我的Sinatra应用程序正在/v2/*中提供所有服务,但它们没有被压缩。我尝试在config.ru中添加"use Rack:Deflater",但由于它经过RoR3,所以它不起作用。这是一个json服务,因此它返回字符串。
我尝试使用GZip::ZLibWriter进行压缩输出,但在另一端没有被解释为gzip格式。
有什么帮助吗?
1个回答

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


我该如何启动这个服务器?“rails s”? - Tony
@Tony,请尝试运行rackup config.ru,或者运行到每个文件的路径。 - ian
我用rails s尝试了一下,看起来运行良好。它能在Heroku上运行吗?我需要试一下。 - Tony
@Tony 应该按照 Heroku 使用 config.ru 将其作为 Rack 应用运行。顺便说一下,很高兴看到你已经解决了它的问题。 - ian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接