部署 Rails production 部署 assets 的问题

xiaoxiao · 2013年09月09日 · 最后由 xiaoxiao 回复于 2013年09月10日 · 3368 次阅读

根据我的理解,ruby 生产环境下运行都是将所有的 js 和 css 压缩成一个 application.js 和 application.css,这就是 Asset Pipeline 的机理。现在我的 assets/javascript 里有许多的 Main Features,根据不同的登陆者的身份加载不同的 css 和 js 比如登陆者身份为 A 的 layout 如下

<%= stylesheet_link_tag :application %>
<%= javascript_include_tag :application %>

比如登陆者身份为 B 的 layout 如下

<%= stylesheet_link_tag :teacher %>
<%= javascript_include_tag :teacher %>

只要对不同的 controller 使用不同的 layout 就可以达到不同的登陆界面了。 现在的问题是,如果这样直接部署的话,有的 js 和 css 就不能被预编译了,我查了 Ruby on rails guide,发现可以修改 application.rb 的配置文件的内容 config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js'] 添加相应的 js css,但是这样的话,这些 js 和 css 编译到一块了,这样不是冲突了吗。。因为有些 js 和 css 是相互冲突我才将他们放在不同的文件夹下的。根据对应的登陆者角色,layout 也不同。这个问题大家是如何解决的。。。

不同的 layout 加载不同的 css

class AController
  layout 'application'
end
# view/layout/application.html.erb
<%= stylesheet_link_tag :application %>
<%= javascript_include_tag :application %>
class BController
  layout 'admin'
end
# view/layout/admin.bao.fm
<%= stylesheet_link_tag :admin%>
<%= javascript_include_tag :admin%>

这两个是独立的模板不会编译在一起

application 需要的引入 application.js/css
admin 需要的引入 admin.css/js 中 这样最终只会生成两种 css/js 文件 application 和 admin

UPDATE config.assets.precompile 这里的设置只是告诉 rails 还有那些文件需要编译

application.js 里面 require 那种写法才会把 js css 合并起来

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