"config.assets.debug"设置究竟有什么作用?



我已经开始开发简单的rails应用程序。经过几个小时的工作,我注意到,不知何故,删除的css仍然适用于网页。

为了解决这个问题,我执行了以下操作几次:

    停止/启动服务器
  1. 使用rails服务器
  2. 使用torquebox server
  3. 删除浏览器缓存

但是没有改变。这是非常奇怪的-新的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.cssapplication.js这样的文件中。错误堆栈跟踪可能不再具有正确的行号,并且很难将这些行号映射回原始代码。

如果你到达这个网页,有可能你在这里,因为你正在使用Rails资产管道,你做了改变,其中一个javascript文件和重新加载的页面,改变不反映当你在Chrome中搜索源选项卡

如上所述,config.assets.debug = false提示spprockets gem将所有单独的javascript和css文件分别捆绑到一个application.js和application.css中。此外,Sprockets在所有相关文件上运行SASS和CoffeeScript(如果您没有使用-skip-coffee)预处理器,以生成浏览器可以理解的css和javascript文件。

一个重要的注意事项如下。Ruby指南说debug = false:

在服务器启动后的第一个请求中缓存资产。如果清单中的任何文件在请求之间都发生了更改服务器返回一个新的编译文件。

这意味着如果你不改变请求之间的css或javascript文件,那么缓存将被使用。一旦您更改了一个文件,缓存将失效,并为后续请求创建一个新的缓存。

因此,如果您对javascript文件进行了更改,并且更改没有反映在页面重新加载上,则与此选项config.assets.debug无关。

还有一个选项叫做config.action_controller.perform_caching

但是在开发过程中这个选项默认为false。也就是说,默认情况下,缓存只在您的生产环境中启用。在当前版本中,Rails默认只提供片段缓存。你必须为Page和Action缓存安装单独的gem。

片段缓存允许将视图逻辑的片段包装在缓存块中,并在下一个请求进入时从缓存存储中提供服务。但是,当视图片段发生变化(例如,视图中的HTML发生变化)时,缓存片段也会过期。

所以问题仍然是为什么你的javascript的变化没有反映出来?答案是Google Chrome,浏览器本身,缓存页面,不管你的Rails设置。要删除缓存,请关闭当前选项卡,打开新选项卡,然后再次访问该站点。

相关内容

  • 没有找到相关文章

最新更新