【问题标题】:Rails using cached application.css despite changes尽管有变化,Rails 仍使用缓存的 application.css
【发布时间】: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的修改时间吗?它可能会设置为将来的某个日期。

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


【解决方案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 缓存清除:

        1. 将 SASS 文件重命名为部分文件,即使用下划线前缀。例如。 _master.css.scss
        2. 从导入中删除扩展名。您可以保留路径,但排除下划线。例如。 @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)时,我的更改都会反映出来

          【讨论】:

            猜你喜欢
            • 2019-04-06
            • 2015-11-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-01
            • 2020-01-15
            相关资源
            最近更新 更多