尽管有变化,Rails 仍使用缓存的 application.css
Posted
技术标签:
【中文标题】尽管有变化,Rails 仍使用缓存的 application.css【英文标题】:Rails using cached application.css despite changes 【发布时间】:2011-10-25 22:14:12 【问题描述】:我有一个使用 SASS 的 Rails 3.1 应用程序。 application.css.scss
文件如下所示:
@import 'reset.css';
@import '960.css';
@import 'pages/master.css.scss';
每当@imported 文件之一发生更改时,我有一个监视脚本会触及application.css.scss
。
有一段时间,此设置运行良好。自上周以来(我不知道为什么),尽管我尝试重新启动应用程序、重新触摸 application.css.scss
等,Rails 一直在为网页提取 application.css
的缓存版本。我也删除.sass-cache
无效。
有什么想法吗?
【问题讨论】:
您的应用程序清单不应该自己自动重建文件吗?你在development
跑步对吗?
你能检查一下你的application.css的修改时间吗?它可能会设置为将来的某个日期。
【参考方案1】:
我遇到了同样的问题。我停止了服务器,执行了rm -fr tmp/cache
,我的css文件终于重建了。
【讨论】:
呃,调试起来太痛苦了。它突然冒出来了。感谢您的提示,总救命稻草。【参考方案2】:首先,通常的缓存清除完整性检查可能会有所帮助。清除浏览器缓存。清除服务器文件缓存(如果您在开发/测试中或在生产中负担得起)和 sass-cache :
rake tmp:cache:clear
rm -fr tmp/sass-cache #or 'compass clean' if using compass
如果这没有帮助,也许 Rails 在其他地方编译了 ANOTHER application.css(缓存清除没有删除)?
例如,我出于调试目的运行 compass watch app/assets/stylesheets/application.css.scss
,它创建了一个 public/assets/application.css 文件,由于它位于 public/ 中,阻止任何新的 application.css .scss 样式表的变化不会被 Rails 注意到。一旦我删除它,应用程序再次从 .scss 样式表中提取。这只是意外覆盖文件创建的一个示例。尝试在整个应用程序目录上运行查找以查找任何生成的 application.css 文件,在缓存清除后执行此操作以避免这些文件出现在您的结果中。
(仅供参考,为了避免我的具体问题,我现在运行 compass watch 并将 --css-dir 指向缓存以防止我的问题
$ compass watch app/assets/stylesheets/application.css.scss --css-dir tmp/cache/
)
【讨论】:
【参考方案3】:在开发中运行 rake assets:precompile
后,我遇到了类似的问题。也许 Rails 正在提供来自public/assets
的预编译资产?试着清理一下。
您不应该在开发中接触 aplication.css.scss,只要 @included 文件之一发生更改,rails 就会提供新内容。
另外,请确保您在config/environments/development.rb
中有以下内容
# Do not compress assets
config.assets.compress = false
# Expands the lines which load the assets
config.assets.debug = true
【讨论】:
【参考方案4】:如果您在 application.scss
中将 @import 'file.css';
替换为 @import 'file';
,则应该允许它在开发模式下自动刷新
在删除文件扩展名之前,我一直在使用 bin/rails tmp:clear
【讨论】:
这终于为我修好了!从导入中删除文件扩展名后,CSS 更改现在会在页面刷新时自动获取。 也适用于我的 scss 而不是 css!谢谢!【参考方案5】:为了清除资产管道缓存,暴力破解 rm -rf tmp/* 将 够了。这肯定修复了一些其他无法解释的 CSS 和 在我的经验中,javascript 出现了故障。作为预防措施,它 升级宝石后清除缓存可能也是一个好主意或 更改资产管道配置,尽管这可能只是 迷信。
最后,如果您正在尝试使用 rake 资产:在您的 开发环境(在后面的文章中详细介绍),您还将 想 rm -rf public/assets/* 之后清理它。
http://blog.55minutes.com/2012/02/untangling-the-rails-asset-pipeline-part-1-caches-and-compass/
【讨论】:
【参考方案6】:您可以通过执行以下操作来调用 Rails automagic 缓存清除:
-
将 SASS 文件重命名为部分文件,即使用下划线前缀。例如。
_master.css.scss
从导入中删除扩展名。您可以保留路径,但排除下划线。例如。 @import 'pages/master';
现在您可以在 master 中进行更改并让它们反映出来,而无需手动弄乱缓存。
(注意:我使用的是 Rails 4.2)
【讨论】:
天哪,这是我 6 小时以来一直在寻找的答案!你比我早 14 天回答了一个 9 岁的问题,这一定是某种奇迹! (Rails 5.0) 有人知道这是为什么吗?【参考方案7】:我今天在使用 Rails 6.0.3.1 时遇到了类似的问题。我不得不重新触摸application.scss
,这样rails 才不会使用缓存的版本。
运行rake tmp:cache:clear
有帮助,但很烦人,因为每次更新任何部分 scss 文件时都必须运行该命令。 :(
【讨论】:
【参考方案8】:随机我遇到了与使用 twitter bootstrap 和 application.css.scss 相关的缓存问题。基本上我将 application.css.scss 更改为普通的 application.css 并解决了我的问题。也许这可以帮助你?如果你还没有弄清楚。
【讨论】:
如果你的application.scss
中有变量或 Sass 将不起作用!【参考方案9】:
我遇到了这个问题,但我实际上是将 css 放入 application.css,而不是放入它包含的文件中。我清除了 application.css 以简单地包含我所有的 css。所以,我的 application.css 现在看起来像这样:
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the top of the
* compiled file, but it's generally better to create a new file per style scope.
*
*= require_self
*= require 'bootstrap.min'
*= require 'global'
*/
每当我更改其中一个包含的文件(例如 global.css)时,我的更改都会反映出来
【讨论】:
以上是关于尽管有变化,Rails 仍使用缓存的 application.css的主要内容,如果未能解决你的问题,请参考以下文章
Android:尽管设置了 MIME 类型,但 PDF 文件仍被隐藏