[LRUG] Rails 4 asset deployment woes

George Sheppard george at fuzzmonkey.co.uk
Tue Jul 16 00:35:56 PDT 2013


I ended up adding my own pre compile Rake task that just copies anything I don't use fingerprinted filenames for to the public/assets folder. Not ideal but saved me from rewriting loads of CSS / JavaScript.

I found out that rails 4 generates a manifest JSON file that maps filenames to fingerprinted filenames that might be useful in some cases. It's in the public/assets folder after you run rake assets:precompile. It's filename is also fingerprinted though.

Regards,

George

On 16 Jul 2013, at 08:11, James Smith <james at floppy.org.uk> wrote:

> 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
>> http://lists.lrug.org/listinfo.cgi/chat-lrug.org
> 
> _______________________________________________
> Chat mailing list
> 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/3139ae6e/attachment.html>


More information about the Chat mailing list