AssetsPipeline

AssetsPipeline

AssetsPipeline是rails3.1版本之后,用来连接,压缩js和css文件的框架,同时支持使用coffescript,sass,erb来编写assets,rails3.1之前的版本的这些特性是通过第三方ruby类库sprockets来集成的,AssetsPipeline是rails的核心特性,

所有的assets都通过Sprockets经过预编译,压缩

 

在rails3.1之后,AssetsPipeline是默认使用的,可以通过修改config/application.rb 中的

config.assets.enabled = false

进行设置

 

三个特性:

1.

rails3.1开始,默认把所有的js文件组合,连接成一个js文件,css文件也一样,在产品模式下,rails在文件名前加入了MD5码来保证这些文件可以被浏览器缓存,当文件的内容发生改变的时候,rails会自动的修改MD5码,使原来的js或者css文件无效

 

2.

如果使用AssetsPipeline,它会对所有的assets,包括js,css,image进行简化压缩,对于CSS文件来说,就是去掉空格和注释,而对于js来说,就比较复杂了

 

3.

AssetsPipeline允许使用高级语言来编写assets,然后预编译成assets,支持的语言包括sass,coffee,erb

 

所有的assets存放在app/assets文件夹下,所有在此文件夹下的文件为Sprockets服务,在sprockets gem包中被引用

,assets是公共的,都将为web服务器或者应用程序作为静态文件服务,所以在被放到服务器之前,都必须进行预编译,在windows下,很多人的程序在产品模式下跑不起来,可能是因为一些assets文件没有通过编译,

产品模式下,预编译后assets文件进行备份,备份作为静态文件被web服务器使用,而app/assets文件本身并不直接被使用,执行rake assets:precompile 生成的文件自动放在public\assets下

 

AssetsPipeline 可以放在应用程序中的三个位置: app/assets, lib/assets, vender/assets

搜索路径有优先级,我这边在搜索路径中没有lib/assets, 不知道是我理解错了还是怎么搞的;

当通过manifest或者helper引用一个文件的时候,Sprockets默认会在这三个位置进行搜索,包括子文件夹

同样也会搜索ruby安装路经lib目录下的assets/*,比如jquery-datatables-rails中的assets也会搜索到,可以使用

Rails.application.config.assets.paths

查看搜索路径

 

可以测试一下,新建test.txt文件,内容为hello,rails

将test.txt文件放在以上三个路径下任意位置,启动服务器,访问:http://localhost:3000/assets/test.txt都可以看到页面有输出hello rails,如果每个路径中都放,则按照优先级高的显示

 

转载请注明: http://michael-roshen.iteye.com/blog/1669506

 

 

你可能感兴趣的:(assets,AssetsPipeline,Pipiline)