【问题标题】:Browser using cached JavaScript assets despite them being modified in Rails 3.1浏览器使用缓存的 JavaScript 资源,尽管它们在 Rails 3.1 中被修改
【发布时间】:2011-11-07 19:37:26
【问题描述】:

我刚刚将我的应用程序升级到 Rails 3.1。我有一个相当复杂的 JavaScript 代码库,并选择将它连接成一个 .js.coffee 文件,由 Sprockets 编译。每隔一段时间,我就会对我的一个 CoffeeScript 文件进行更改,刷新页面,然后发现我的更改没有得到反映。查看 Chrome 调试器,我注意到没有从服务器读取文件(“网络”选项卡在相应文件上显示“(来自缓存)”)。这似乎是随机发生的,这使得开发非常非常令人沮丧。我找到的唯一解决方案是清除浏览器缓存或重新启动浏览器。

有什么想法吗?我尝试在我的 javascript_include_tag 调用中打开 :debug ,但得到了相同的结果。事实上,当我有多个标签时,似乎唯一返回“(从缓存)”的资产就是我改变的那些!这有点讽刺。

【问题讨论】:

  • 您是否尝试按住shift 并点击重新加载?我相信这应该重新加载页面而不会命中缓存。
  • Chrome 19 和 Rails 3.2 仍然存在问题。即使缓存控制标头包含 must-revalidate,页面也是从缓存中提供的(有时)。

标签: javascript ruby-on-rails ruby coffeescript


【解决方案1】:

我无法复制。我刚刚创建了一个新的 Rails 3.1 项目,然后做了

rails generate controller welcome index

已删除index.html,未注释

root :to => 'welcome#index'

来自routes.rb,添加行

console.log 1

welcome.js.coffee,然后启动Chrome并加载http://0.0.0.0:3000/。我在控制台上得到了1。将号码改为2,保存,刷新页面,得到2。等等。我是按 Cmd+R 还是只输入地址似乎都没有关系;无论哪种方式,我都会收到最新的welcome.js

您能帮我“查看源代码”吗?你的脚本是否包含看起来像

<script src="/assets/welcome.js?body=1" type="text/javascript"></script> 

还是不一样?

【讨论】:

  • 是的,正如您指定的那样。这个问题只是偶尔发生,但当它发生时,它是彻头彻尾的烦人。目前,我一直在我的浏览器中使用硬刷新(Shift+Cmd+R)来强制重新加载所有缓存的资源,而且它似乎可以解决问题。
  • @Teejay Huh。那么您的项目是否有可能正在做任何会导致资产被缓存的事情(即,服务器在请求文件时给出“304 Not Modified”)?您的 Gemfile 中的任何内容可能会产生这种影响?
【解决方案2】:

Chrome 在其开发者工具中提供了一个禁用缓存的选项。转到设置,在网络下,应该有一个禁用缓存的复选框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2011-10-04
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    相关资源
    最近更新 更多