Ruby on rails Rails使用缓存的application.css,尽管有更改

Ruby on rails Rails使用缓存的application.css,尽管有更改,ruby-on-rails,ruby-on-rails-3,sass,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'; 我有一个watchr脚本,每当@imported文件中的一个被更改时,它就会触及application.css.scss 有一段时间,这个设置运行良好。从上周开始(我不知道为什么),Rails一直在为网页拉一个缓存版本的application.c

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

@import 'reset.css';
@import '960.css';
@import 'pages/master.css.scss';
我有一个watchr脚本,每当@imported文件中的一个被更改时,它就会触及
application.css.scss

有一段时间,这个设置运行良好。从上周开始(我不知道为什么),Rails一直在为网页拉一个缓存版本的
application.css
,尽管我尝试重新启动应用程序,重新触摸
application.css.scss
,等等。我还删除了
.sass缓存
,但毫无效果


有什么想法吗?

随机我遇到了一个与使用twitter引导和application.css.scss相关的缓存问题。基本上,我将application.css.scss改为纯application.css,并修复了我的问题。也许这能帮到你?如果你还没弄明白的话

首先,通常的缓存清除健全性检查可能会有所帮助。清除浏览器缓存。清除服务器文件缓存(如果您正在进行开发/测试或有能力在生产中使用)和sass缓存:

rake tmp:cache:clear
rm-fr tmp/sass缓存#或“compass clean”(如果使用compass)
如果这没有帮助,也许Rails在别处编译了另一个application.css(缓存清除时没有删除)

例如,为了调试,我运行了
compass watch app/assets/stylesheets/application.css.scss
,它创建了一个public/assets/application.css文件,由于它位于public/中,所以Rails不会注意到任何新的application.css.scss样式表更改。一旦我删除了它,应用程序就会再次从.scss样式表中删除。这只是意外重写文件创建的一个示例。尝试在整个应用程序目录上运行查找,查找任何生成的application.css文件,在清除缓存后执行此操作,以避免这些文件显示在结果中

(仅供参考,为了避免我的具体问题,我现在运行compass watch时,将--css dir指向缓存以防止我的问题

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

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

要清除资产管道缓存,将使用蛮力rm-rf tmp/*命令 足够这无疑修复了一些令人费解的CSS和 根据我的经验,JavaScript出现了一些小问题。作为预防措施,它 升级gems或gems后清除缓存也是一个好主意 更改资产管道配置,尽管这可能只是 迷信

最后,如果您正在试验rake资产:在 开发环境(在后面的文章中对此有更多介绍),您还将 想在事后使用rm-rf public/assets/*来清理


在开发中运行
rake资产:预编译之后,我遇到了类似的问题。也许Rails正在为来自
公共/资产
的预编译资产提供服务?试着清理一下

在开发过程中,您不需要接触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

我遇到了这个问题,但实际上我将css放入application.css,而不是它包含的文件中。我清除了application.css,只包含了我所有的css。因此,my 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 automagic缓存破坏:

  • 将SASS文件重命名为部分文件,即使用下划线前缀。例如
    \u master.css.scss
  • 从导入中删除扩展名。可以保留路径,但不包括下划线。例如,
    @import'页面/母版'
  • 现在,您可以在master中进行更改并将其反映出来,而不必手动破坏缓存


    (注意:我使用的是Rails 4.2)

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


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

    如果在
    应用程序.scss
    中将
    @import'file.css';
    替换为
    @import'file';
    ,则应允许它在开发模式下自动刷新


    我一直在使用
    bin/rails tmp:clear
    直到我删除了文件扩展名

    你的应用程序清单不应该自动重新生成文件吗?你正在运行
    开发
    对吗?你能检查一下你的应用程序的修改时间吗?css?它可能会被设置为将来的某个日期。啊,调试起来太痛苦了。a它突然出现了。谢谢你的提示,total lifesaver。如果你的
    应用程序中有变量或Sass,它就不起作用了。scss
    !天哪!这是我一直在寻找的答案!你比我早14天回答了一个9年的问题,这一定是某种奇迹!(Rails 5.0)有人知道这是为什么吗?