rails 3.1资产管道css缓存在开发中

hol*_*den 36 sass ruby-on-rails-3 ruby-on-rails-3.1 asset-pipeline

我有点困惑,因为似乎application.css包含了两次,一次是它从清单中列出资源然后是缓存.因此,当我删除单个文件时,它似乎仍然在application.css文件中保持活着状态.

application.css(source)

/*
*= require twitter/bootstrap
*= require_self
*= require_tree ./common
*= require_tree ./helpers
*/
Run Code Online (Sandbox Code Playgroud)

它按预期工作,并以开发模式输出所有相关的单个文件

development.rb

  # Do not compress assets
  config.assets.compress = false

  # Expands the lines which load the assets
  config.assets.debug = true
Run Code Online (Sandbox Code Playgroud)

产量

<link href="/assets/twitter/bootstrap.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/application.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/common/announcement.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/common/button.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<Blah blah>
Run Code Online (Sandbox Code Playgroud)

application.css(输出)

这应该是空白的吗?因为我在application.css文件中的所有内容都是清单而没有实际的css,但我得到的所有连接代码都是106kb.

IE如果我删除公共目录中的文件,它不会消失.它不再列在输出中,但css仍然出现在application.css中

ere*_*ere 41

我以前遇到过这样的问题.这是因为我在公共文件夹以及apps目录中的applcation.css之后预编译了资产.我不确定如何解决它,以便它在开发模式下不会发生,但如果你删除你的/public/assets目录,它应该修复它.

检查并查看您是否有公共/资产文件夹,如果您这样做并且它已满,这可能是您看到双倍的原因.

  • 我删除了我的`application.js`和`application.css`,但留下了指纹版本.看起来它对我有用. (4认同)
  • 我真的很惊讶需要解决这个问题.我编译了大约10-15个文件,并且每个文件现在都在dev中被压缩和解压缩,从而造成严重破坏.这是否意味着我必须每次都编写一个脚本来清理application.js,application.css和所有其他压缩文件?这真的没有多大意义. (3认同)
  • 如何在推动生产变更然后再回到开发之间隐藏公共文件夹中的资产?我可以以某种方式将它从开发中的路径中删除吗? (2认同)

Pet*_*oeg 37

目前(2012-09-24)有一个rails/sprockets错误导致它无法正确检测导入的文件.

这应该在rails 3.2.9及更高版本中修复,但同时你可以按如下方式解决:

  1. 杀死rails实例
  2. rm -rf tmp/cache
  3. 启动rails实例

你现在应该看到正确的CSS.


Agu*_*tin 10

你可能想看一下

/sf/answers/549843171/

"将config.serve_static_assets = false添加到development.rb将阻止从/ public/assets加载文件"

这样做对我来说.


Abd*_*bdo 7

@ Agustin的解决方案适合我,但这里有一些你需要做的事情:

  1. 删除/ tmp/cache/assets中的所有内容

  2. 添加config.serve_static_assets = false到development.rb或test.rb(@Agustin的信用)

  3. 重启服务器.

  4. 确保您的application.js/.css未在浏览器中缓存.转到http://localhost:3000/assets/application.js?body=1并点击ctrl + f5强制刷新(你也可以尝试在最后追加一个随机化器参数:http://localhost:3000/assets/application.js?body=1&rnd=12343 如果你得到别的东西并且ctrl + f5仍然没有帮助,你需要清除浏览器的缓存.

跳过其中任何一个步骤都会返回缓存的application.js/.css与单个文件中的更新冲突.