【发布时间】:2013-02-19 16:50:09
【问题描述】:
我已阅读并尝试了此处 (Ruby On Rails 3.1 - assets pipeline - assets rendered twice) 针对 Rails 中的重复资产问题的解决方案,但它不适用于我的场景,如下所示:
布局:
<!DOCTYPE html>
<html>
<head>...</head>
<body>
...
<!-- including :application -->
<%= javascript_include_tag :application %>
<!-- yielding :body_script -->
<%= yield :body_script %>
</body>
</html>
然后,在“用户”视图中:
<%= content_for :body_script do %>
<%= javascript_include_tag 'users' %>
<% end %>
...
...
...
我的 javascript 依赖项是:
- application.js “需要”jquery、bootstrap 和 self
- users.js“需要”worker_interface.js
- worker_interface.js“需要”jquery、knout 和应用程序
渲染“用户”视图时,我的正文末尾出现重复的 jquery 和 application.js,其中一个由于 javascript_include_tag :application 而被渲染,另一个因为yield :body_script,像这样:
<!-- including :application -->
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<!-- yielding :body_script -->
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/knockout.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<script src="/assets/worker_interface.js?body=1" type="text/javascript"></script>
<script src="/assets/users.js?body=1" type="text/javascript"></script>
我知道我在这里有多余的依赖项,因为我要求不止一次(间接地)包含 jquery 和应用程序。但是,Rails 不应该保证不会呈现重复文件吗? 我是否仍然可以保留“冗余”依赖项并只渲染一次文件?
顺便说一句,我使用的是 Rails 版本 3.2.9。
【问题讨论】:
-
您在 application.js 中使用
require_tree吗?人们告诉我,Rails 足够聪明,不会多次包含给定资产,但我一次又一次地看到完全相反的情况。资产管道可能是一件神秘的事情。另一件值得关注的事情是你是否有一些已经预编译的资产。我注意到有时我的开发环境会同时加载非静态和静态资产,可能是配置设置。 -
嘿@Cyle,我没有在任何地方使用require_tree。我已经用“config.serve_static_assets = false”禁用了静态资产的服务:(
-
我假设 sadface 意味着它不起作用;)。更改该设置后您重新启动了服务器吗?如果您在本地进行测试,大多数现代浏览器也会缓存旧的 CSS。尝试清除缓存。如果这不能解决问题,那么我唯一可以建议的另一件事是查看此 SO stackoverflow.com/questions/8558472/… 中建议的空白行答案
标签: ruby-on-rails asset-pipeline sprockets