Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails 4.2 Rails.application.config.assets.version doesn't invalidate digest asset file names

I have a Rails 4.2.4 (Ruby 2.2.2) application and I am serving static assets via Cloudfront.

If Cloudfront is serving something you don't want, there are two possibilities:

  • Invalidate the content in Cloudfront or
  • Change the name of the asset served

However, when i change

Rails.application.config.assets.version = '1.0'

to

Rails.application.config.assets.version = '2.0'

(in config/initializers/assets.rb)

and

  • delete all the assets in public/assets

  • run "RAILS_ENV=staging bundle exec rake assets:precompile"

the same file names are generated!

The only way i found to invalidate the digested file of application.scss was to add some dummy content in order to provoke a new md5 checksum.

What am i doing wrong?

Shouldn't a new assets.version change the digested file names?

Best Regards and thanx!

like image 961
Stefan Kühn Avatar asked Sep 13 '15 10:09

Stefan Kühn


People also ask

How do you Precompile Rails assets?

To compile your assets locally, run the assets:precompile task locally on your app. Make sure to use the production environment so that the production version of your assets are generated. A public/assets directory will be created. Inside this directory you'll find a manifest.

What does rake assets Clean do?

rake assets:clean removes compiled assets. It is run by cap deploy:assets:clean to remove compiled assets, generally from a remote server.

What is assets Precompile?

rails assets:precompile is the task that does the compilation (concatenation, minification, and preprocessing). When the task is run, Rails first looks at the files in the config.assets.precompile array. By default, this array includes application.js and application.css .


1 Answers

As per the comments in the Rails pull request I opened, this is a regression that needs to be fixed: https://github.com/rails/sprockets-rails/issues/240

Update: As sansarp mentions, one of the workarounds listed in that github issue is to use an old version of sprockets:

gem 'sprockets', '< 3.0.0'

Another workaround is to use the asset path as a cache breaker instead:

# config/initializers/assets.rb
Rails.application.config.assets.prefix = "/assets/v1"
like image 104
Jordan Brough Avatar answered Sep 28 '22 00:09

Jordan Brough