Rails 3.1资产 - 发展中的奇怪服务

时间:2011-12-02 12:21:25

标签: ruby-on-rails asset-pipeline

我遇到了Rails 3.1资产管道的问题。 资产包括两次开发:

<script src="/assets/main_new.js?body=1" type="text/javascript"></script>
<script src="/assets/pagenav.js?body=1" type="text/javascript"></script>
<script src="/assets/tours.controller.js?body=1" type="text/javascript"></script>
<script src="/assets/tours.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>

Rails以某种方式编译并包含 application.js ,因此所有脚本都包含两次 - 作为单个文件和 application.js

生产中的预编译资产一切都很好。

development.rb

 config.assets.compress = false
 config.assets.debug = true

production.rb

# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false

# Compress both stylesheets and JavaScripts
config.assets.compress = true
config.assets.js_compressor  = :uglifier
config.assets.css_compressor = :scss

config.assets.compile = false
config.assets.digest = true

application.rb中

config.assets.enabled = true

5 个答案:

答案 0 :(得分:39)

尝试将以下内容添加到development.rb:

config.serve_static_assets = false

...然后清除浏览器缓存(基于评论进行更新

静态资产是指公共/资产中的预编译资产,rake assets:precompile放置它们。

正在发生的事情是,公共/资产中存在的任何内容都会覆盖app / assets中的任何内容。因此,当js标记打算识别app / assets / application.js时,正在加载public / assets / application.js.

答案 1 :(得分:12)

一旦摆脱/ public / assets,您还必须清除浏览器缓存。

答案 2 :(得分:8)

这只是给我带来了一个问题。设置以下内容使应用程序工作,但包含单个application.js文件 - 我不想在开发中使用它:

config.serve_static_assets = false

我之前预先编译了我的资产(似乎是原因)。

为了解决这个问题,我做了以下几点:

  • 删除先前预编译已添加的公共/资产目录。
  • 运行RAILS_ENV=development rake assets:clean以清除tmp / assets
  • 已编辑的app / assets / application.js

只有在我编辑了application.js之后才会出错,然后纠正它,页面中包含的applciation.js不是完整的,预编译的application.js。

我不确定是否所有这些都需要完成。我也在沿途重新启动我的服务器。

答案 3 :(得分:4)

被这个(又一次)绊倒了, - 不要忘记在//= require结尾处的所有application.js指令后添加一个BLANK LINE!

答案 4 :(得分:0)

我用较少的文件添加相同的问题。

此处来自documentation

  

在开发模式中,资产在订单中作为单独的文件提供   它们在清单文件中指定。

我的解决方案是从*= require_tree .删除行application.css.less,并仅使用较少的@import "my-styles";

也许你可以用javascript找到类似的解决方案......