Ruby on rails Rails使用缓存的application.css,尽管有更改
我有一个使用SASS的Rails 3.1应用程序。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
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)有人知道这是为什么吗?