How to enable compression in Ruby on Rails?
Enable compression
Add it to config/application.rb:
module YourApp
class Application < Rails::Application
config.middleware.use Rack::Deflater
end
end
Source: http://robots.thoughtbot.com/content-compression-with-rack-deflater
Rack::Deflater
should work if you use insert_before
(instead of "use"), to place it near the top of the middleware stack, prior to any other middleware that might send a response. .use
places it at the bottom of the stack. On my machine the topmost middleware is Rack::Sendfile
. So I would use:
config.middleware.insert_before(Rack::Sendfile, Rack::Deflater)
You can get the list of middleware in order of loading by doing rake middleware
from the command line.
Note: A good link for insert_before vs Use in middleware rack
As per the author of Rack::Deflater
it should be placed after ActionDispatch::Static
in a Rails app. The reasoning is that if your app is also serving static assets (like on Heroku, for example), when assets are served from disk they are already compressed. Inserting it before would only end up in Rack::Deflater
attempting to re-compress those assets. Therefore as a performance optimisation:
# application.rb
config.middleware.insert_after ActionDispatch::Static, Rack::Deflater