Where to insert Rack::Deflater in the rack?

前端 未结 3 1821
伪装坚强ぢ
伪装坚强ぢ 2021-02-04 06:50

I currently have the following:

use Rack::Rewrite
use Rack::Cache, {:verbose=>true, :metastore=>\"memcached://localhost:11211/rack-cache/meta\", :entitysto         


        
相关标签:
3条回答
  • 2021-02-04 07:11

    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.

    0 讨论(0)
  • 2021-02-04 07:33

    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.

    0 讨论(0)
  • 2021-02-04 07:34

    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
    
    0 讨论(0)
提交回复
热议问题