我是新来的Rails,以及遇到问题搞清楚组织我的资产的最佳途径。 这个问题的目的是为了收集我的想法,征求意见,并随着时间的推移演变的文件 - 或许它可以是一个Rails指南一天。 (Rails的维基似乎是死的。)这将表示为帮助概念化为新手,而不是一个参考,所以它会被限制在最常见的情况。
资产管道-概述
有关目的,效益和管道的内部运作细节,开始与本指南: http://guides.rubyonrails.org/asset_pipeline.html我只总结有关在这里我的目的位。
原因在管道是必要的:
- 编译:编译高级语言(ERB,Haml的,无礼的话,LESS,CoffeeScript的...)为纯CSS / JS。
该管线的额外的好处是:
- 级联:多个文件合并成一个,以提高客户端性能。
- 缩小:删除空格和其他聪明的优化,以减少文件大小。
- 指纹:添加的文件内容的MD5哈希的文件名来强制缓存再次**获取该文件时它改变。
资产管道-缺省文件系统布局
-
app|lib|vender/assets/
-面向将由管道处理的文件。 -
app/assets/
-专为您的应用程序创建的文件之意。 -
lib/assets/
-专门为您在多个应用程序共享创建的文件之意。 -
vendor/assets/
- (虽然他们经常由宝石提供,而不是被直接导入到/厂商),用于通过其它诸如jQuery和Twitter的引导创建的文件具体预期。 -
public/
-文件中,这里是来自你的web应用程序的根路径(“/”)保留原样,并且可提取直接。
资产管道-默认的文件和行为
应用程序/资产/ JavaScript的/ application.js中
//= require jquery
//= require jquery_ujs
//= require_tree .
应用程序/资产/样式表/ application.css
/*
*= require_self
*= require_tree .
*/
公共/ 404.html
公共/的robots.txt
...
的Gemfile
...
gem 'jquery-rails'
...
这里的资产管道编译器使用新的Rails应用程序的默认设置是什么:
- 编译器,默认情况下,将处理
application.js
,application.css
,和所有非JS / CSS文件(图片,大部分)。 - 这两个应用程序文件包含链轮指令(与=启动注释行)。 链轮是库权力滑轨资产管道汇编。 这些指令也被称为体现 ,因为他们列出文件列入。
-
application.js
包含了两个jQuery的文件(存在于jQuery的轨道宝石,而不是在你的应用程序)拉一个清单,然后在所有文件翻出app/assets/javascripts/
通过树require_tree .
。 包括所有文件通过这个清单将被编译成称为单文件application-[the MD5 hash].js
,并放置在public/assets/
。 -
application.css
包含拉在所有文件的清单app/assets/stylesheets/
通过树require_tree .
。 该required_self
指令告诉编译器包含在任何CSS内容application.css
文件本身,并在指令的顺序。 所以,在这种情况下,在CSSapplication.css
就会出现上面休息。 包括所有文件通过这个清单将被编译成称为单文件application-[the MD5 hash].css
,并放置在public/assets/
。 - 在app /资产树中的所有非JS / CSS文件(图片,大部分)也将获得按指纹,并放置在
public/assets/
,目录结构不变。 例如,app/assets/images/categories/computers.png
最终将作为public/assets/categories/computers-[the MD5 hash].png
。
概念化内部资产相关方案
图片
图片有他们之间没有依赖关系,他们总是独自站立。
样式表
- CSS:CSS文件可以导入对方,只要路径是正确的,这将工作,虽然它可能不是最好的方法。
- 萨斯:萨斯文件可以导入对方,以及共享变量和混入,但只有当他们仍然萨斯 (不编译到CSS后),而且只能通过进口萨斯 。 如果您在链轮指令
application.css.scss
需要“a”和“B”,他们将在独立的环境中合并之前编译。 要共享变量,混入,你必须导入“A”从“B”或反之亦然使用萨斯导入指令。 (参见下面的关键概念1)。 - LESS:不知道有足够的了解这一点。]
JavaScript的
- JS:JavaScript组件具有相互依赖性(例如:Twitter的引导用了jQuery)。 然而,他们都在浏览器中运行时得到议决,所以不要紧,你如何组织/在你的项目合并文件,只要所有内容最终将被加载到浏览器。
- CoffeeScript的:不知道有足够的了解这一点。]
辅助行为- Rails的意见
ALL
辅助行为-萨斯
ALL
最佳做法-关键概念
- 这条管道是制备资产进行生产。 你可以把它作为部署系统,而不是应用程序本身的一部分。 建立你自己的应用程序的逻辑结构,然后配置到链轮上的结构正常运行。
最佳实践-通用资产方案
ALL
最佳实践-一般使用默认值的汇总
ALL
** **的问题