究竟“config.assets.debug”设置到底是什么?
我已经开始开发简单的rails应用程序了。 经过几个小时的工作后,我注意到删除的css仍以某种方式应用于网页。
为了解决这个问题,我多次执行了以下操作:
- 停止/启动服务器
- 使用rails服务器
- 使用扭矩箱服务器
- 删除浏览器缓存
但没有变化。 这很奇怪 – 新的css定义已经应用,但我删除的那些仍然存在。 所以,我放弃了,决定创建新项目。
我已经设置了新项目(它的脚手架与第一个脚手架相同),当我打开其中一个视图时,旧项目的样式也被应用了。 我决定再次查看http://guides.rubyonrails.org/asset_pipeline.html并找出该设置
#Expands the lines which load the assets config.assets.debug = false
解决了这个问题。 但这个选项究竟做了什么呢? 当这是真的时,为什么旧的项目css被应用?
这个选项的效果在这篇文章中有详细描述,但我也在这里总结一下。 更改config.assets.debug
的价值在于开发中的页面加载时间和调试的简易性之间的折衷。
基本上:
config.assets.debug = true
:资产按单独提供,按照您在开发中看到的方式进行组织。 像SASS或CoffeeScript这样的预处理语言仍然会显示为目标语言(分别是CSS和JS)。
config.assets.debug = false
:资产被捆绑到application.css
和application.js
等文件中。 错误堆栈跟踪可能不再具有正确的行号,并且更难将它们映射回原始代码。
如果你进入这个网页,你有可能在这里,因为你正在使用Rails资产管道,你对其中一个javascript文件进行了更改并重新加载了页面,当你在Sources选项卡中搜索时,没有反映出更改在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设置,仍在缓存页面。 要删除缓存,请关闭当前选项卡,打开新选项卡,然后再次访问该站点。