Setting Cache-Control headers on js assets in RAILS 3.1
Asked Answered
M

2

7

I check the headers on my production server as

    curl --head -H "Accept-Encoding: gzip" http://foo.heroku.com/assets/mobile.js

and I get back the following headers which suggest RAILS is not setting the cachecontrol headers.

HTTP/1.1 200 OK
Server: nginx/0.7.67
Date: Wed, 22 Jun 2011 12:01:55 GMT
Content-Type: application/javascript
Connection: keep-alive
Content-Md5: efb90436a465f8a73efb467109f745f3
Cache-Control: no-cache
Last-Modified: Wed, 22 Jun 2011 11:46:04 GMT
Etag: "efb90436a465f8a73efb467109f745f3"
X-Ua-Compatible: IE=Edge,chrome=1
X-Runtime: 0.001258
X-Content-Digest: 6493f457e9550773761bb1c2c52ec4cb44a19c19
X-Rack-Cache: stale, valid, store
X-Varnish: 164373614
Age: 0
Via: 1.1 varnish
Content-Encoding: gzip

I'd like to get heroku's varnish cache caching the assets and only refreshing on git push. Any ideas on how to get this?

Brad

Mommy answered 22/6, 2011 at 12:22 Comment(1)
This article should shed some light on the issue: jimmycuadra.com/posts/…Gutta
M
9

You have to add this in your environment/production.rb:

config.serve_static_assets = true
config.static_cache_control = "public, max-age=172800"
Mossman answered 22/6, 2011 at 12:22 Comment(2)
Even 3 years later you made my day with your config.static_cache_control thanksBefriend
Make that 7 :-)Thievery
A
1

Camille's answer is right for Rails versions before 5.1

However, in Rails 5.1 config.static_cache_control will be deprecated. The code updated with the new available option should be:

config.serve_static_assets = true
config.public_file_server.headers = { 'Cache-Control' => 'public, max-age= 172800' }
Apophysis answered 27/7, 2016 at 21:33 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.