What is the purpose of config.assets.precompile?

2019-01-18 02:02发布

问题:

In Rails 3.1, you must whitelist files that you want included in asset precompilation. You must open up config/environments/production.rb and explicitly include assets you want precompiled:

config.assets.precompile += ['somestylesheet.css']

If you don't do this this and you run rake assets:precompile, your asset will not be copied to public/assets, and your app with raise an exception(therefore causing a 500 error in production) when an asset is not found.

Why is this necessary? Why aren't all assets automatically precompiled?

This current approach creates extra code and stress when deploying. Wouldn't it be easier to blacklist/exclude assets so things worked right out of the box? Anyone else share these feelings?

回答1:

Most assets are automatically included in asset precompilation. According to the RoR Guide on the Asset Pipeline:

The default matcher for compiling files includes application.js, application.css and all files that do not end in js or css: [ /\w+\.(?!js|css).+/, /application.(css|js)$/ ]

You would use config.assets.precompile if you have additional assets to include:

config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js']

Or you could overwrite it.



回答2:

I think it has to do with the pipeline/sprockets ability to require separate files.

For example, I have an admin.js file in my app/assets/javascripts folder. But all it does is require several other .js files.

//= require jquery
//= require jquery_ujs
//= require jquery.colorpicker.js
//= require jquery.wysiwyg.js
//= require wysiwyg.image.js
//= require jquery.fileupload.js
//= require jquery.fileupload-ui.js
//= require codemirror.js
//= require css.js
//= require admin_load

This is because (a) I'm using external js plugins and (b) I like to keep things like jQuery onload handlers in separate files.

If every .js file was precompiled, then it would precompile each one of these individual files–which is totally unnecessary. All I want/need is the single admin.js file precompiled.

Same goes for CSS files.



回答3:

The assets precompile to me is cool so you dont end up deploying assets that you do not want. Dont also forget about the uglifer gem that helps compress your javascripts. Imaging all this are not existing and you just deploy your app and you find out that you have unused css files and uncompressed javascripts. how would you feel. this is just my own opinion and i say the asset pipeline is the coolest thing in rails.. Being able to manage all your assets properly.

And mind you if i am rails i would not want to compile assets that you would not want so you would say in your mind why did this guy compile these assets.. :)