Javascript在具有资产管道的开发模式中缓存

时间:2011-10-01 04:52:20

标签: ruby-on-rails-3.1 asset-pipeline

我最近将我的应用程序升级到rails 3.1并且通常一切似乎都在工作,但有一件事让我疯狂。

我有两个主要的js文件,我们称之为application.js和main.js.

application.js中包含我的清单,并在main.js中加载。这工作正常。我的问题是当我处于开发模式并且我对main.js进行了更改,然后刷新页面,网站没有获取更改。为了引入更改,我重新启动了rails服务器。

我在开发中打开了调试模式,但我想知道是否还有其他设置我缺少?

之前有人碰到过吗?

8 个答案:

答案 0 :(得分:15)

我遇到了同样的问题,但config.action_controller.perform_caching已经设置为false。

对于我和我正在使用的其他人,问题是Chrome尽管在Rails中进行了设置,但仍在缓存页面。

要解决此问题,我们只需关闭标签页,打开新标签页,然后再次访问该网站。

答案 1 :(得分:4)

我遇到了同样的问题,发现在开发中删除资产摘要修复了这个问题。确保在developmen.rb中将其设置为false:

config.assets.digest = false

答案 2 :(得分:2)

我遇到了同样的问题,我终于在我的development.rb中偶然发现了一些问题。我将config.action_controller.perform_caching设置为true,将其更改为false可以解决问题。

答案 3 :(得分:2)

以隐身模式打开Chrome对我来说效果最佳。无需打开和关闭选项卡。在隐身模式下,Chrome不会缓存javascript。

答案 4 :(得分:2)

另请注意,如果启用config.threadsafe,它将打开cache_classes。因此,如果您的config / environments / development.rb文件包含以下内容:

config.cache_classes = false
config.threadsafe!

然后你关闭cache_classes,然后重新打开它。您将需要注释掉config.threadsafe(如果您不需要它),如下所示:

config.cache_classes = false
# config.threadsafe!

或者,如果您需要线程安全,请颠倒这两个配置的顺序,以便真正关闭config_classes:

config.threadsafe!
config.cache_classes = false

有关详细信息,请参阅http://tenderlovemaking.com/2012/06/18/removing-config-threadsafe.html

答案 5 :(得分:1)

查看您的开发日志,看看它在提供application.js时的含义。

对于正常请求(浏览到页面),它看起来应该是这样的:

Started GET "/assets/application.js" for 127.0.0.1 at Fri Sep 30 12:13:27 +1300 2011
Served asset /application.css - 304 Not Modified (2ms)

如果没有,您可能没有正确设置管道选项。其中一个生产设置可能位于错误的位置。资产管道指南的Section 9列出了已迁移应用的正确设置清单。

答案 6 :(得分:1)

我有同样的问题,config.action_controller.perform_caching设置正确。我还使用Heroku和Precompile资产进行Push to Heroku: RAILS_ENV =生产包exec rake资产:预编译 在推送之后,当我开始新工作时,我忘记使用以下命令删除预编译资产: sudo rm -r public / assets / *

所以,无论我对我的任何.js文件做了什么,他们的更改都没有显示出来。

答案 7 :(得分:0)

如果上述答案在您的背景下失败..

确保缓存由rails完成..有时它不会检测资产中的更改并提供较旧的缓存版本。

使用 removedelay()>> rails c
 或者只是删除Rails.cache.clear dir

中的缓存

tmp