【问题标题】:Rails: Conditionally enable Rack::Deflater?Rails:有条件地启用 Rack::Deflater?
【发布时间】:2014-09-03 11:24:09
【问题描述】:

我们正在我们的 Rails 服务器中迁移到更新版本的 API,并希望启用 Deflater / gzip 压缩,但仅适用于新的 api-routes。

routes.rb 类似这样:

....
....
def add_api_routes
  resources :foo, only: [:index, :show]
  resources :bar, only: [:index, :show]
end

namespace :api, defaults: { format: 'json' }, constraints: { subdomain: /internal|^$/ }, path: '/'  do
  namespace :v2, module: nil do
    add_api_routes
  end

  namespace :v1, module: nil do
    add_api_routes
  end
end
....
....

我们确实在 application.rb 中添加了以下行

...
config.middleware.use Rack::Deflater
...

但这对两个版本都启用了 gzip。

只能为一个版本的 api 启用它。 (例如 v2)?

谢谢。 任何帮助将不胜感激。

【问题讨论】:

标签: ruby-on-rails api routes


【解决方案1】:

正如@apneadiving 在他的评论中提到的那样。从这里的条件:https://github.com/rack/rack/blob/master/lib/rack/deflater.rb#L31,你可以这样做:

config.middleware.use Rack::Deflater, :if => lambda { |env, status, headers, body| env["PATH_INFO"] == "/v2/" } # or Regular expression: env["PATH_INFO"].match(/\/v2\//) matches -> /v2/

【讨论】:

  • 谢谢,看来这正是我们想要的。让我试一试,并将其标记为正确/已接受。
猜你喜欢
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
  • 2011-12-20
  • 2011-09-12
  • 2015-12-27
  • 1970-01-01
相关资源
最近更新 更多