尽管有变化,Rails仍使用缓存的application.css

时间:2011-08-12 15:27:37

标签: ruby-on-rails ruby-on-rails-3 sass

我有一个使用SASS的Rails 3.1应用程序。 application.css.scss文件如下所示:

@import 'reset.css';
@import '960.css';
@import 'pages/master.css.scss';

每当其中一个@imported文件发生更改时,我都会有一个监视器脚本触及application.css.scss

有一段时间,这个设置工作正常。自上周以来(我不知道为什么),Rails已经为网页提取了application.css的缓存版本,尽管我尝试重新启动应用,重新触摸application.css.scss等等。我还删除了.sass-cache无效。

有什么想法吗?

9 个答案:

答案 0 :(得分:10)

我有同样的问题。我停止了服务器,执行了rm -fr tmp/cache,我的css文件终于重建了。

答案 1 :(得分:7)

首先,通常的缓存清除健全性检查可能有所帮助。清除浏览器缓存。清除服务器文件缓存(如果您在开发/测试中或可以负担生产)和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 /中的位置,阻止任何新的应用程序.css.scss样式表从Rails注意到变化。删除后,应用程序再次从.scss样式表中删除。这只是意外覆盖文件创建的一个示例。尝试在整个应用程序目录中运行查找以查找任何生成的application.css文件,在清除缓存后执行此操作以避免在结果中显示这些文件。

(仅供参考,为了避免我的具体问题,我现在使用--css-dir指向缓存来运行指南针监视以防止我的问题

$ compass watch app/assets/stylesheets/application.css.scss  --css-dir tmp/cache/

答案 2 :(得分:7)

在开发中运行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

答案 3 :(得分:2)

  

要清除资产管道缓存,强制rm -rf tmp / *会   满足。这肯定修复了一些其他无法解释的CSS和   JavaScript在我的经历中出现故障。作为预防措施,它   在升级gems或之后清除缓存也是一个好主意   更改资产管道配置,虽然这可能只是   迷信。

     

最后,如果您正在尝试使用rake资产:在您的网站中进行预编译   开发环境(稍后将在后面的文章中详述),你也会   希望rm -rf public / assets / *之后清理它。

http://blog.55minutes.com/2012/02/untangling-the-rails-asset-pipeline-part-1-caches-and-compass/

答案 4 :(得分:1)

您可以通过执行以下操作来调用Rails automagic 缓存清除:

  1. 将SASS文件重命名为部分名称,即使用下划线前缀。例如。 _master.css.scss
  2. 从导入中删除扩展名。您可以保留路径,但不包括下划线。例如。 @import 'pages/master';

现在,您可以在master中进行更改并反映出来,而无需手动弄乱缓存。

(注意:我在Rails 4.2上)

答案 5 :(得分:1)

如果您在@import 'file.css';中将@import 'file';替换为application.scss,应该可以在开发模式下将其自动刷新

在删除文件扩展名之前,我一直在使用bin/rails tmp:clear

答案 6 :(得分:0)

随机我遇到了与使用twitter bootstrap和application.css.scss相关的缓存问题。基本上我将application.css.scss更改为普通的application.css并修复了我的问题。也许这可以帮到你?如果你还没有想出来的话。

答案 7 :(得分:0)

我遇到了这个问题,但实际上我把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)

时,我的更改都会反映出来

答案 8 :(得分:0)

我今天在Rails 6.0.3.1中遇到了类似的问题。我不得不重新触摸application.scss,以使Rails不会使用缓存的版本。

运行rake tmp:cache:clear很有帮助,但这很烦人,因为每次更新任何部分scss文件时我都必须运行命令。 :(