我有点困惑,因为似乎application.css包含了两次,一次是它从清单中列出资源然后是缓存 . 因此,当我删除单个文件时,它似乎仍然在application.css文件中保持活着状态 .
application.css(来源)
/*
*= 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 回答
对我们有用的是设置'config.assets.debug = false'
这不再将包含HTML的CSS设置为href =“/ assets / bootstrap-new.css?body = 1”,而是将其设置为href =“/ assets / bootstrap-new.css”,我认为这是问题 .
我有同样的问题 . 尽管清除了tmp / cache和public / assets,但是minified application.css仍然被缓存并从某个地方提供,并且我对单个css文件的更改没有得到服务 .
这对我有用:在application.css中删除行
*= require_self
重启服务器
这似乎删除了缓存,如果您在浏览器源中单击application.css,您将不再看到缩小版本
将
*= require_self
替换回文件并继续开发 .我知道这是一个老问题,但一个对我有用的修复是我有nginx代理到我的开发环境,并且它在配置中有一个
location ~ ^/(assets)/
块 . 要么注释掉,要么尝试重新启动nginx以使缓存无效 . 如果你可能只是想完全评论它 .在记住这个问题之前,我已经失去了太多时间进行故障排除 .
我需要最后一步,但我已经修好了 . 这是我做的:
关闭rails服务器
耙资产:干净
rake tmp:清楚
重启rails服务器
然后,我在谷歌浏览器中刷新了我的屏幕,但仍然没有工作 . 所以,我推出了Firefox和瞧,实际上它正在运行 . 这意味着Chrome正在缓存浏览器中的旧文件 . 所以,然后我清除了Chrome中的浏览器缓存,它运作良好!
我以前遇到过这样的问题 . 这是因为我在公共文件夹以及apps目录中的applcation.css之后预编译了资产 . 我在开发模式下继续发生但是如果你删除了
/public/assets
目录,它应该修复它 .检查并查看您是否有公共/资产文件夹,如果您这样做并且它已满,这可能是您看到双倍的原因 .
目前(2012-09-24)有一个rails / sprockets错误导致它无法正确检测导入的文件 .
这应该在rails 3.2.9及更高版本中修复,但同时你可以按如下方式解决:
杀死rails实例
rm -rf tmp / cache
启动rails实例
你现在应该看到正确的CSS .
你可能想看一下
https://stackoverflow.com/a/7854902/686460
“将config.serve_static_assets = false添加到development.rb将阻止从/ public / assets加载文件”
这样做对我来说 .
@ Agustin的解决方案适合我,但这里有一些你需要做的事情:
删除/ tmp / cache / assets中的所有内容
将
config.serve_static_assets = false
添加到development.rb或test.rb(@Agustin的信用)重新启动服务器 .
确保您的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仍然没有't helped, you need to clear your browser'的缓存 .跳过其中任何一个步骤都会返回缓存的application.js / .css与单个文件中的更新冲突 .
最适合我的方法是删除tmp / cache / *目录的内容......
在 生产环境 环境中运行应用程序时,资产可以更好地完成工作,然后您只需加载包含所有文件的application.css,并进行压缩,以减少服务器请求,这个带有压缩样式的application.css将是缓存 .
http://guides.rubyonrails.org/asset_pipeline.html