新手问题 请教生产环境 rake assets:precompile

levan · 2013年06月09日 · 最后由 Levan 回复于 2013年06月09日 · 3767 次阅读

是需要把 app/assets/stylesheets/ 下文件名一个一个的都添加到 app/config/environments/production.rbconfig.assets.precompile += %w( ) 里面吗? 有什么自动添加app/assets/stylesheets/ 里面的全部文件吗?

app/assets下的文件缺省全部被 precompile 如果我没记错的话

@blacktulip 都需要一个一个的把文件名加入吗?main.css ......

#2 楼 @Levan 不用吧... 你在 application.css 里面 reference 了就行了

@blacktulip 自己前端一般,所以很多页面都是 clone 的,如果都 reference 到 application.css 里,会不会所有的 css js 在更换页面的时候都会重新加载一遍?还是会只要用户打开第一次,之后不管他跳转到哪个页面,都不要重新加载 css js 文件了?

#4 楼 @Levan 额,我也不是很懂,不过据你描述的情况看应该是只加载第一遍之后就 cache 到本地了。

@blacktulip 好吧,谢啦。我都试试吧。因为不是纯用 bootstrap,很多独立页面的设计都是用单独的前端文件。

#6 楼 @Levan 我也做过类似的事情,要把一个 Joomla 的网站迁移到 Rails 上,本想 CSS 照抄就是,谁知道打开一看乱七八糟,一狠心自己用 bootstrap 把整个页面从空白开始重新实现了一遍。虽然说这过程比较烦人,但是以后就省事多了。

#8 楼 @Levan 不管你是自己写也好,照抄别人的也罢,总之确定好以下事项:

  1. css, js 不要写在页面内部,都变成外部资源(文件)引入页面
  2. 这些文件放进 assets 目录下属于它们自己的地方,也就是样式和脚本分开放好,最好再加上清晰准确的目录层次,养成好习惯
  3. 在 application.{css, js, scss, coffee} 里 require 好这些资源,只要你能在 development 环境下正常运行,那就说明 require 对了
  4. 于是 precompile 的时候,Rails 会顺藤摸瓜按照 application.{css, js, scss, coffee} 里 require 的文件顺序将它们打包压缩,最终你得到的只是两个文件而已: application.cssapplication.js
  5. 所以你不需要去修改 config 里的什么,除非你在别处还有一些外部资源要 precompile 到一起——这正是 config.assets.precompile 选项的用途
  6. 最后因为这些都打包在了一起,所以无论用户浏览哪个页面,需要的样式和脚本都会存在;如果你觉得打包在一起会太大,那么就要考虑其他的方案,比如说分成几部分打包,或者使用模块依赖管理工具——这是另外一个话题了。通常这个问题不会造成太大影响,因为当用户第一次访问之后,这些文件都被缓存在本地了,如果你此后频繁修改,那么需要考虑一下因为缓存失效带来的重复载入问题

就是这样。对于 Assets Pipeline 的种种细节,还是通读一下官方的文档更好。

搞不清楚的时候多做实验。

简单说,所有你在 view 里点了名的 js 和 css 文件都需要加到 precompile 里。图片等资源在 4.0 之前默认全部,所以不用管。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号