【问题标题】:Returning gzipped content on a Sinatra app在 Sinatra 应用程序上返回 gzip 压缩的内容
【发布时间】:2013-05-14 15:45:14
【问题描述】:

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

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

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

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

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

有什么帮助吗?

【问题讨论】:

    标签: json ruby-on-rails-3 web-services sinatra 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 应该会为您处理。

    【讨论】:

    • 我该如何启动这个服务器? “轨道 s”?
    • @Tony 试试rackup config.ru,或任何通往这些事物的路径。
    • 我尝试使用 rails s,它似乎工作正常。它可以在 Heroku 上运行吗?我需要试试。
    • @Tony 应该像 Heroku uses the config.ru 一样将其作为 Rack 应用程序运行。很高兴你让它正常工作。
    猜你喜欢
    • 2018-10-22
    • 2011-04-20
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多