我最近将我的应用程序升级到了 Rails 3.1,通常一切似乎都正常,但有一件事让我发疯。
我有 2 个主要的 js 文件,我们称它们为 application.js 和 main.js。
application.js 中有我的清单内容,并且正在 main.js 中加载。效果很好。我的问题是,当我处于开发模式并且对 main.js 进行更改,然后刷新页面时,该网站不会接收更改。为了引入更改,我重新启动了 Rails 服务器。
我在开发中打开了调试模式,但我想知道是否还缺少另一个设置?
有人遇到过这个吗?
我有同样的问题,但
config.action_controller.perform_caching
已经设置为false。
对于我和另一个与我一起工作的人来说,问题在于 Chrome 正在缓存页面,尽管 Rails 中进行了设置。
为了解决这个问题,我们只需关闭该选项卡,打开一个新选项卡,然后再次访问该网站。
我遇到了同样的问题,发现删除开发中的资产摘要可以解决该问题。确保在developmen.rb中将其设置为false:
config.assets.digest = false
我也遇到了同样的问题,我终于在我的development.rb中偶然发现了一些东西。我将
config.action_controller.perform_caching
设置为 true,并将其更改为 false 解决了问题。
以隐身模式打开 Chrome 最适合我。无需打开和关闭选项卡。在隐身模式下,chrome 不会缓存 javascript。
还要注意,如果启用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
查看您的开发日志,看看在提供 application.js 时它会说什么。
对于正常请求,它应该看起来像这样(您浏览到一个页面):
于 2011 年 9 月 30 日星期五 12:13:27 +1300 开始获取 127.0.0.1 的“/assets/application.js” 服务资产 /application.css - 304 未修改(2 毫秒)
如果不是,您可能没有正确设置管道选项。其中一项生产设置可能位于错误的位置。资产管道指南的第 9 节提供了已迁移应用程序的正确设置清单。
我有同样的问题,config.action_controller.perform_caching 设置正确。我还使用 Heroku 并使用以下方法预编译用于 Push to Heroku 的资产: RAILS_ENV=生产包执行 rake 资产:预编译 推送后,当我开始新工作时,我忘记使用以下方法删除预编译资产: sudo rm -r 公共/资产/*
因此,无论我对任何 .js 文件执行什么操作,它们的更改都不会显示出来。
如果上述答案在您的情况下失败..
确保缓存是由rails完成的..有时它无法检测到资产的更改并提供旧的缓存版本..
使用
rails c
>>
Rails.cache.clear
tmp
dir 中的缓存
[project_dir/tmp/cache/assets"]
我们的根本原因可能不同。但同样的症状,这就是我解决问题的方法。
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
已不同步。我认为删除一个好的旧版本就可以了!