2011-10-01 58 views
14

我最近将应用程序升级到了rails 3.1,而且一般情况下一切似乎都正常,但有一件事令我疯狂。Javascript以资产管道的开发模式被缓存

我有2个主要的js文件,我们将它们称为application.js和main.js.

application.js有我的清单的东西,它正在加载main.js。这工作正常。我的问题是,当我处于开发模式时,我对main.js进行了更改,然后刷新页面,网站没有收到更改。为了拉入更改,我重新启动了rails服务器。

我在开发中打开调试模式,但我想知道是否有另一个设置我错过了?

之前的任何人进入这个运行?

+1

我有同样的问题,希望在这里找到解决办法。我似乎无法找到任何方法来阻止提供缓存的JS文件(或CSS)。 Sux在那些艰难的日子里,当你所能做的只是一次改变一件小事,你必须不断重新启动WEBrick ... –

回答

14

我有同样的问题,但config.action_controller.perform_caching已被设置为false。

对于我和我一起工作的另一个人来说,问题在于Chrome尽管在Rails中设置了缓存页面。

要解决这个问题,我们只关闭了标签,打开了一个新标签,并再次访问了该网站。

+0

这就结束了 - 实际上是铬的事情。我仍然不知道为什么,但我必须手动清除浏览器缓存,然后才能找到更改。 – JoshReedSchramm

+1

这只是发生在我身上,重新启动浏览器似乎解决了这个问题......它好像它突然决定服务缓存,尽管perform_caching设置为false。奇怪。 – StuR

+1

刚刚花了最后3个小时试图解决这个问题。我甚至重新启动了我的电脑,但由于OSX现在保存了您打开的浏览器窗口,显然这没有做到。关闭标签,打开它,并解决问题。我想我现在要去拍自己了。 –

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包含已迁移应用的正确设置清单。

+1

yah我开始GET“/assets/main.js?body=1”for 127.0.0.1 at 2011-10-01 16:22:16 -0400 服务资产/main.js - 304未修改(0ms) – JoshReedSchramm

+0

bah注释中没有换行符。看起来像从缓存服务,再次看指导 – JoshReedSchramm

+0

你在浏览器中看到什么标题? –

2

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

2

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

1

我有同样的问题,config.action_controller.perform_caching设置正确。我还使用Heroku和预编译资源推送到Heroku: RAILS_ENV =生产捆绑包exec rake资产:预编译 推送完成后,当我开始新的工作时,我忘记删除预编译的资产: sudo rm -r public/assets/*

所以,不管我对我的任何.js文件做了什么,它们的变化都没有显示出来。

2

另请注意,如果启用config.threadsafe,它将打开cache_classes。所以,如果你的config /环境/ development.rb文件包含以下内容:

config.cache_classes = false 
config.threadsafe! 

然后你关闭cache_classes然后右后卫将其打开。您将需要注释掉配置。线程(如果你不需要它)是这样的:

config.cache_classes = false 
# config.threadsafe! 

或者,如果你需要线程,扭转这两种配置的顺序,使config_classes真的关闭:

config.threadsafe! 
config.cache_classes = false 

对于更多信息,请参阅http://tenderlovemaking.com/2012/06/18/removing-config-threadsafe.html

4

我有同样的问题,发现删除开发中的资产摘要可以解决问题。请务必将其设置为false developmen.rb:

config.assets.digest = false 
0

如果上述答案在上下文失败..

确保缓存由轨道..有时它不会检测所做的更改在资产和服务于旧的缓存版本..

使用 rails c >> Rails.cache.clear
或者干脆删除缓存中tmp DIR

[project_dir/tmp/cache/assets"]

相关问题