Rails 3.1 Asset Pipeline - Why should I use the Asset Helpers in a SCSS file?

为君一笑 提交于 2019-12-30 11:38:31

问题


I'm just getting into the Asset Pipeline; I'm using SASS/SCSS, but I'm not understanding why I should be using the Asset Helpers.

For example, if I have some CSS/SCSS without using an Asset Helper:

background-image: url('rails.png');

This will work fine because both my .SCSS file and image are in and accessible through the assets directory.

What's the point of doing this?:

background-image: asset-url("rails.png", image);

I understand it will add "/assets/" to the url, but why should I be using the Asset Helpers if the standard CSS way will work?

I think I'm missing something. Does it have something to do with deploying to production?


回答1:


Using the helpers gives you access to the finger printed URLs in production. From the Asset Pipeline guide:

In the production environment Rails uses the fingerprinting scheme outlined above. By default it is assumed that assets have been precompiled and will be served as static assets by your web server.

During the precompilation phase an MD5 is generated from the contents of the compiled files, and inserted into the filenames as they are written to disc. These fingerprinted names are used by the Rails helpers in place of the manifest name.

So in production, the paths have an MD5 appended and you have things like this:

/assets/pancakes-af27b6a414e6da00003503148be9b409.png

With the checksums in place, Rails can tell browsers to cache these files forever. Then, if you do a new release that changes one of your assets, the checksum changes and that changes the whole path; the new path makes the browser think it is a whole new file so it will fetch it again. Without the checksums you can easily get old files stuck in browser caches and that sort of thing isn't exactly a happy fun time.



来源:https://stackoverflow.com/questions/7947967/rails-3-1-asset-pipeline-why-should-i-use-the-asset-helpers-in-a-scss-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!