我已经开始开发简单的rails应用程序了。经过几个小时的工作后,我注意到删除的css仍以某种方式应用于网页。
为了解决问题,我多次执行以下操作:
但没有任何改变。这很奇怪 - 新的css定义已经应用,但我删除的那些仍然存在。所以,我放弃了,决定创建新项目。
我已经设置了新项目(它的脚手架与第一个脚手架相同),当我打开其中一个视图时,旧项目的样式也被应用了。我决定再次查看http://guides.rubyonrails.org/asset_pipeline.html并找出该设置
#Expands the lines which load the assets
config.assets.debug = false
解决了这个问题。但这个选项究竟做了什么呢?当这是真的时,为什么要应用旧项目css?
答案 0 :(得分:34)
这个选项的效果在this post中有详细描述,但我也会在这里总结一下。更改config.assets.debug
的价值在于开发中的页面加载时间和调试的简易性之间的折衷。
<强>基本上强>
config.assets.debug = true
:资源按照您在开发过程中看到的方式单独提供。像SASS或CoffeeScript这样的预处理语言仍然会显示为目标语言(分别是CSS和JS)。
config.assets.debug = false
:资产被捆绑到application.css
和application.js
等文件中。错误堆栈跟踪可能不再具有正确的行号,并且更难将它们映射回原始代码。
答案 1 :(得分:1)
如果你进入这个网页,你有可能在这里,因为你正在使用Rails资产管道并且你对其中一个javascript文件进行了更改并重新加载了页面,当你搜索时没有反映出更改Chrome中的“来源”标签。
如上所述,config.assets.debug = false
提示Sprockets gem将所有单独的javascript和css文件分别捆绑到一个application.js和application.css中。 Sprockets还在所有相关文件上运行SASS和CoffeeScript(如果你没有使用--skip-coffee)预处理器来生成浏览器可以理解的css和javascript文件。
一个重要的注意事项如下。 Ruby Guides说这关于debug = false:
服务器启动后,第一个请求会缓存资产。如果 清单中的任何文件都在请求之间发生了变化 服务器以新的编译文件响应。
这意味着如果您不在请求之间更改css或javascript文件,则将使用缓存。更改文件后,缓存将失效,并为后续请求创建新缓存。
因此,如果您对javascript文件进行了更改,并且更改未在页面重新加载时反映出来,则它与此选项config.assets.debug
无关。
还有另一种选择
config.action_controller.perform_caching
。
但默认情况下,此选项在开发中默认为false。也就是说,默认情况下,缓存仅在生产环境中启用。在当前版本中,Rails默认只附带Fragment Caching。您必须为页面和动作缓存安装单独的gem。
片段缓存允许将视图逻辑片段包装在缓存块中,并在下一个请求进入时从缓存存储器中提供。但是,当视图片段发生更改时,缓存片段也将过期(例如,视图中的HTML更改。)
所以问题仍然是为什么你的javascript的变化没有反映出来?答案是谷歌浏览器,浏览器本身,尽管你的Rails设置,仍在缓存页面。要删除缓存,请关闭当前选项卡,打开新选项卡,然后再次访问该站点。