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

时间:2011-11-16 21:28:56

标签: ruby-on-rails-3 ruby-on-rails-3.1 asset-pipeline sass

我有点困惑,因为看起来application.css包含了两次,一次是从清单中列出资源然后是缓存。因此,当我删除单个文件时,它似乎仍然存在于application.css文件中。

application.css(source)

/*
*= require twitter/bootstrap
*= require_self
*= require_tree ./common
*= require_tree ./helpers
*/

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

development.rb

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

  # Expands the lines which load the assets
  config.assets.debug = true

输出

<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>

application.css(输出)

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

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

10 个答案:

答案 0 :(得分:41)

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

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

答案 1 :(得分:37)

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

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

  1. 杀死rails实例
  2. rm -rf tmp / cache
  3. 启动rails实例
  4. 你现在应该看到正确的CSS。

答案 2 :(得分:10)

您可能需要查看

https://stackoverflow.com/a/7854902/686460

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

这是为我做的。

答案 3 :(得分:7)

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

  1. 删除/ tmp / cache / assets

  2. 中的所有内容
  3. config.serve_static_assets = false添加到development.rb或test.rb(积分给@Agustin)

  4. 重新启动您的服务器。

  5. 确保您的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仍然没有帮助,你需要清除浏览器的缓存。

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

答案 4 :(得分:4)

最适合我的方法是删除 tmp / cache / *目录的内容......

答案 5 :(得分:3)

对我们有用的是设置'config.assets.debug = false'

这不再将包含HTML的CSS设置为href =“/ assets / bootstrap-new.css?body = 1”,而是将其设置为href =“/ assets / bootstrap-new.css”,我认为是问题。

答案 6 :(得分:1)

我遇到了同样的问题。尽管清除了tmp / cache和public / assets,但是minified application.css仍然被缓存并从某个地方提供,我对单个css文件的更改没有得到满足。

这对我有用: 在application.css中删除行*= require_self

重启服务器

似乎删除了缓存,如果您在浏览器源中单击application.css,您将不再看到缩小版本

*= require_self替换回文件并继续开发。

答案 7 :(得分:0)

我需要最后一步,但我已经修好了。这是我做的:

  1. 关闭rails服务器
  2. rake assets:clean
  3. rake tmp:clear
  4. 重新启动rails服务器
  5. 然后,我在谷歌浏览器中更新了我的屏幕,但仍然无法正常工作。所以,我推出了Firefox和瞧,实际上它正在运行。这意味着Chrome正在缓存浏览器中的旧文件。所以,然后我清除了Chrome中的浏览器缓存,它运作良好!

答案 8 :(得分:0)

我知道这是一个老问题,但是对我有用的一个修复是我有nginx代理到我的开发环境并且它在配置中有一个location ~ ^/(assets)/块。要么注释掉,要么尝试重新启动nginx以使缓存无效。如果您正在开发,您可能只想完全评论它。

在我记得这件事之前,我没有太多时间对其进行故障排除。

答案 9 :(得分:-5)

在生产环境中运行应用程序时,资产可以更好地完成工作,然后您只需加载包含所有文件的application.css,并进行压缩,以减少服务器请求和压缩后的application.css样式将被缓存。

http://guides.rubyonrails.org/asset_pipeline.html