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

Fen*_*lon 36 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>
Run Code Online (Sandbox Code Playgroud)

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

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

development.rb

 config.assets.compress = false
 config.assets.debug = true
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

application.rb中

config.assets.enabled = true
Run Code Online (Sandbox Code Playgroud)

Eth*_*hen 39

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

config.serve_static_assets = false
Run Code Online (Sandbox Code Playgroud)

...然后清除浏览器缓存(根据评论更新)

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

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

  • 看到在`rails 3.2`上运行的同样问题,这个修复对我来说不起作用."public/assets"中也没有任何内容,因为这是一个全新的项目,我还没有运行`rake assets:precompile`.任何想法是如何解决它?我必须在开发模式下运行`config.assets.debug = false`只是为了让我的javascript正常运行而且它变得很烦人! (18认同)
  • @BenScheirman - 我已经报告[这是对rails github问题跟踪器的错误](https://github.com/rails/rails/issues/5145).有人提交了一个拉取请求来修补它但尚未被接受.希望它很快就会到来.随意给它一个+1. (6认同)
  • 我遇到了与@Batkins(Rails 3.2)相同的问题,结果是浏览器缓存有问题(因为我是 mac 新手,我没有使用 command + shift + R) (2认同)

Eff*_*for 12

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


Pet*_*ter 8

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

config.serve_static_assets = false
Run Code Online (Sandbox Code Playgroud)

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

要修复它,我做了以下事情:

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

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

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