Javascript 在开发模式下通过资产管道进行缓存

问题描述 投票:0回答:9

我最近将我的应用程序升级到了 Rails 3.1,通常一切似乎都正常,但有一件事让我发疯。

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

application.js 中有我的清单内容,并且正在 main.js 中加载。效果很好。我的问题是,当我处于开发模式并且对 main.js 进行更改,然后刷新页面时,该网站不会接收更改。为了引入更改,我重新启动了 Rails 服务器。

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

有人遇到过这个吗?

ruby-on-rails-3.1 asset-pipeline
9个回答
15
投票

我有同样的问题,但

config.action_controller.perform_caching
已经设置为false。

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

为了解决这个问题,我们只需关闭该选项卡,打开一个新选项卡,然后再次访问该网站。


4
投票

我遇到了同样的问题,发现删除开发中的资产摘要可以解决该问题。确保在developmen.rb中将其设置为false:

config.assets.digest = false

2
投票

我也遇到了同样的问题,我终于在我的development.rb中偶然发现了一些东西。我将

config.action_controller.perform_caching
设置为 true,并将其更改为 false 解决了问题。


2
投票

以隐身模式打开 Chrome 最适合我。无需打开和关闭选项卡。在隐身模式下,chrome 不会缓存 javascript。


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


1
投票

查看您的开发日志,看看在提供 application.js 时它会说什么。

对于正常请求,它应该看起来像这样(您浏览到一个页面):

于 2011 年 9 月 30 日星期五 12:13:27 +1300 开始获取 127.0.0.1 的“/assets/application.js”
服务资产 /application.css - 304 未修改(2 毫秒)

如果不是,您可能没有正确设置管道选项。其中一项生产设置可能位于错误的位置。资产管道指南的第 9 节提供了已迁移应用程序的正确设置清单。


1
投票

我有同样的问题,config.action_controller.perform_caching 设置正确。我还使用 Heroku 并使用以下方法预编译用于 Push to Heroku 的资产: RAILS_ENV=生产包执行 rake 资产:预编译 推送后,当我开始新工作时,我忘记使用以下方法删除预编译资产: sudo rm -r 公共/资产/*

因此,无论我对任何 .js 文件执行什么操作,它们的更改都不会显示出来。


0
投票

如果上述答案在您的情况下失败..

确保缓存是由rails完成的..有时它无法检测到资产的更改并提供旧的缓存版本..

使用

rails c
>>
Rails.cache.clear

或者直接删除
tmp
dir

中的缓存

[project_dir/tmp/cache/assets"]


0
投票

我们的根本原因可能不同。但同样的症状,这就是我解决问题的方法。

TLDR:如果

[main-application-file]-[hash-id].js
已损坏,则不会更新。所以我必须完全删除
/public/assets
目录!然后重建我的应用程序并重新启动 Rails 服务器。

详情

对我来说根本原因是我的

application-[hash-id].js
已损坏且无法更新!即使当被迫重建时,我看到
app/assets/builds/application.js
正在接受我的更改。因此,我必须从浏览器向后查看从
Rails server
提供的文件并找到这些文件。因此,当我看到
application.js
中的构建代码和公共构建代码
application-[hash-id].js
已不同步。我认为删除一个好的旧版本就可以了!

© www.soinside.com 2019 - 2024. All rights reserved.