[LRUG] Rails 4 asset deployment woes

James Smith james at floppy.org.uk
Tue Jul 16 00:11:43 PDT 2013


I had exactly this issue under Rails 4. Unless you precompile the assets in production mode, it creates fingerprinted filenames, but doesn't use them in the helpers (if I got that the right way round). 

I thought this was pretty damn stupid, and filed a bug: https://github.com/rails/rails/issues/10551. In my view, it should be consistent wherever you are compiling. Fine if dev mode doesn't minify or fingerprint, but make it consistent. I was told that it should only now be done in production, end of story. Not a very useful solution, I think - too much room for pilot error.

I had a quick go at a (far too simple) PR on sprockets which would dump out a text warning if not in production mode, but I ran out of time to make it properly robust.

cheers,
James


On Monday, 15 July 2013 at 12:45, James Coglan wrote:

> I'm struggling with getting asset deployment to work after upgrading a few of our apps to Rails 4. I have two main problems:
> 
> * We cannot reference images/fonts from stylesheets
> * Our CSS/JS is no longer being minified in production
> 
> The first one is because Rails no longer generates unversioned filenames in public/assets, so you need to have
> 
>     body {
>       background: url(/assets/cat-abc123def456.jpg);
>     }
> 
> in your stylesheet rather than
> 
>     body {
>       background: url(/assets/cat.jpg);
>     }
> 
> Of course, the latter works in development but not in production after precompiling the assets. So, we need to know how to get those version numbers into the CSS, since Rails does not rewrite these references by default while precompiling assets. 
> 
> Second, our CSS is not being minified, and we have no idea why. If you clone https://github.com/jcoglan/rails_assets, and run:
> 
>     $ bundle exec rake assets:precompile
> 
> then it does not minify the code in public/assets, which we assumed was because config/environments/development.rb sets config.assets.debug = true. If you compile in production: 
> 
>     $ RAILS_ENV=production bundle exec rake assets:precompile
> 
> then it does minify the CSS. So, we figured there must be a config difference and that would explain why our code is not being minified in our production apps that have been upgraded from Rails 3 to 4. So, I deleted all the code from config/environments/{development,production}.rb and it still does the same thing: no minification in development mode, and minified code in production. So it doesn't seem like a config thing -- is this difference baked in Rails? What am I doing wrong? Why would our production apps not be minifying their CSS?
> 
> -- 
> James Coglan
> http://jcoglan.com
> +44 (0) 7771512510 
> _______________________________________________
> Chat mailing list
> Chat at lists.lrug.org (mailto:Chat at lists.lrug.org)
> http://lists.lrug.org/listinfo.cgi/chat-lrug.org
> 
> 


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lrug.org/pipermail/chat-lrug.org/attachments/20130716/1e110c66/attachment.html>


More information about the Chat mailing list