在rails3.1使用assets pipeline with compass

天涯浪子 提交于 2020-03-01 14:19:57

    assets pipeline是rails3.1中引入的重要特性之一,它的作用是让我们工程目录下面凌乱的js,css等文件,有序摆放。例如:

  1. 我们自己维护的、而且只在当前应用中使用的js、css可以放在app/assets目录中
  2. 我们自己维护的、但是会在N个应用中共享的js、css可以放在lib/assets目录中
  3. 我们自己不维护的js、css可以放在vendor/assets目录中

    分门别类的好处是让我们可以在第一时间找到对应的js、css文件,同理可以扩展到其他的格式的文件,例如image。另外例如存在一个文件是app/assets/stylesheets/somecssfile.css ,那么我们就可以通过http://www.example.com/assets/somecssfile.css 这个链接访问到上面那个文件。

    rails怎么识别这些路径呢?原来是在Rails.application.config.asserts.paths这个变量中定义的,我们可以在config/application.rb这个文件中修改,自定义一个assets目录,例如/home/myname/**/*/lib/assets,那么这个目录中的js、css文件同样可以使用 http://www.example.com/assets/stylesheets/anothercssfile.css 这样类似路径访问得到。

    在rails3.1中编写css文件,最好使用sass/scss来做整理,可以让css代码复用能力更强,从而做到DRY。当然,如果你使用了sass/scss,那么进而利用compass这个框架算是不错的选择。在3.1之前,我们原来是这么做的  compass init rails path/to/app ,这个命令会在app下面生成stylesheets目录,把css/sass/scss文本放在里面。但是在3.1中这么,会让我觉得乱的。

    第一种方法,手工将代码移入上面说到3个assets目录其中之一中去,不过看起来没那么优雅,而且得修改配置。

    第二个方法修改config.sass.load_paths,compass中几个stylesheets目录加载进来,让assets pipeline中的sass,scss代码可以执行@import,具体可以参考http://spin.atomicobject.com/2011/07/12/sass-sprockets-compass-with-rails-3-1/ 这篇文章。

    当然还有第三个办法就是我一开始铺垫的修改config.assets.paths的配置让compass gem中的stylesheets直接成为其加载目录。

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