究竟“config.assets.debug”设置到底是什么?

时间:2013-05-03 11:22:27

标签: ruby-on-rails ruby ruby-on-rails-3 asset-pipeline jruby

我已经开始开发简单的rails应用程序了。经过几个小时的工作后,我注意到删除的css仍以某种方式应用于网页。

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

  1. 停止/启动服务器
  2. 使用rails服务器
  3. 使用torquebox服务器
  4. 删除浏览器缓存
  5. 但没有任何改变。这很奇怪 - 新的css定义已经应用,但我删除的那些仍然存在。所以,我放弃了,决定创建新项目。

    我已经设置了新项目(它的脚手架与第一个脚手架相同),当我打开其中一个视图时,旧项目的样式也被应用了。我决定再次查看http://guides.rubyonrails.org/asset_pipeline.html并找出该设置

    #Expands the lines which load the assets
    config.assets.debug = false
    

    解决了这个问题。但这个选项究竟做了什么呢?当这是真的时,为什么要应用旧项目css?

2 个答案:

答案 0 :(得分:34)

这个选项的效果在this post中有详细描述,但我也会在这里总结一下。更改config.assets.debug的价值在于开发中的页面加载时间和调试的简易性之间的折衷。

<强>基本上

config.assets.debug = true:资源按照您在开发过程中看到的方式单独提供。像SASS或CoffeeScript这样的预处理语言仍然会显示为目标语言(分别是CSS和JS)。

config.assets.debug = false:资产被捆绑到application.cssapplication.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设置,仍在缓存页面。要删除缓存,请关闭当前选项卡,打开新选项卡,然后再次访问该站点。