Rails:有条件地启用Rack :: Deflater?

时间:2014-09-03 11:24:09

标签: ruby-on-rails api routes

我们正在我们的rails服务器中迁移到更新版本的API,并希望启用Deflater / gzip -compression,但仅适用于新的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)?

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

1 个答案:

答案 0 :(得分:2)

正如@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/