Where to insert Rack::Deflater in the rack?

我们两清 提交于 2019-12-03 00:37:23
Parker Selbert

The simplest way to insert it is directly in your config.ru:

require ::File.expand_path('../config/environment',  __FILE__)
use Rack::Deflater
run My::Application

To confirm it is working start up your app and hit it with curl:

curl -i --head "Accept-Encoding: gzip,deflate" http://localhost:5000

Which should return the headers:

Vary: Accept-Encoding
Content-Encoding: gzip

And a beautifully gzipped response.

I had to insert it pretty early (before ActionDispatch::Static), like this:

# production.rb
config.middleware.insert_before ActionDispatch::Static, Rack::Deflater

You can use rake middleware to confirm (although this will look at your development settings)

> rake middleware
use Rack::Deflater
use ActionDispatch::Static
use Rack::Lock
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007f8e18455e90>
use Rack::Runtime
use Rack::MethodOverride
use ActionDispatch::RequestId
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::DebugExceptions
use ActionDispatch::RemoteIp
use ActionDispatch::Reloader
use ActionDispatch::Callbacks
use ActionDispatch::Cookies
use ActionDispatch::Session::CookieStore
use ActionDispatch::Flash
use ActionDispatch::ParamsParser
use Remotipart::Middleware
use ActionDispatch::Head
use Rack::ConditionalGet
use Rack::ETag
use ActionDispatch::BestStandardsSupport
use Warden::Manager
use Rack::Mongoid::Middleware::IdentityMap
use Rack::Pjax
run MyApp::Application.routes

In response to Maletor, for how to exclude certain files from being gzip'd, see:

http://icelab.com.au/articles/wrapping-rack-middleware-to-exclude-certain-urls-for-rails-streaming-responses/

tried it (in Sinatra) and works great.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!