Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Weak ETAGs in Rails?

What is the best way to tell rails to use weak instead of strong ETAGs when using methods fresh_when and stale??

The reason I ask is that nginx (correctly) removes strong ETAG headers from responses when on-the-fly gzipping is enabled.

like image 463
KaptajnKold Avatar asked Sep 09 '13 07:09

KaptajnKold


1 Answers

I took the code from @grosser's answer and turned it into a Gem:

  • https://rubygems.org/gems/rails_weak_etags
  • https://github.com/johnnaegle/rails_weak_etags

You can just add this to your gemfile:

gem 'rails_weak_etags'

And it will be installed into your middleware before Rack::ConditionalGet:

> bundle exec rake middleware
....
use RailsWeakEtags::Middleware
use Rack::ConditionalGet
use Rack::ETag
....

Then all the e-tags generated by rails, either with Rack::ETag or with explicit e-tags will be converted to weak. Using a patched, or version > 1.7.3 of nginx, will then let you use e-tags and gzip compression.

RACK 1.6 defaults etags to weak - this gem is no longer helpful if you upgrade.

like image 166
John Naegle Avatar answered Oct 13 '22 10:10

John Naegle