You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 7开发环境VM中视图缓存不更新问题排查与解决

Rails 7视图修改不生效问题的排查与解决

问题场景与初始配置

我基于Rails 7开发,在Windows 10系统用Sublime Text编辑代码,代码所在文件夹已共享;Rails环境部署在VirtualBox的Ubuntu Server虚拟机中,通过/etc/fstab挂载CIFS共享的代码库。config/environments/development.rb的核心配置如下:

config.cache_classes = false
config.reload_classes_only_on_change = false
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.cache_store = :null_store

config.public_file_server.headers = {
  'Cache-Control' => "no-cache"
}

问题现象

通过VirtualBox仅主机网络(192.168.56.101:3000)用Firefox访问开发站点时,控制器、模型等非视图文件修改后刷新页面可正常更新,但视图模板(.html.erb)修改后多次刷新仍加载旧内容。已禁用Firefox的HTTP缓存,换用Edge浏览器问题依旧,推测是Rails端缓存导致。

初步排查尝试

曾尝试调整development.rb中的文件监视器配置:

# config.file_watcher = ActiveSupport::EventedFileUpdateChecker
# config.file_watcher = ActiveSupport::FileUpdateChecker

启用config.file_watcher = ActiveSupport::FileUpdateChecker让listen gem使用轮询模式,问题仍未解决。

问题定位与解决过程

关键发现

问题根源与Samba共享、listen gem的文件监听机制相关:file_watcher需要在config.reload_classes_only_on_change = true时才能正常生效,正确配置如下:

config.reload_classes_only_on_change = true
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
# 或
config.file_watcher = ActiveSupport::FileUpdateChecker

验证方案

将代码库迁移到Ubuntu虚拟机的主目录后,出现两个明显变化:

  • 项目运行速度显著提升
  • 使用nano修改视图文件时,页面刷新可立即生效

最终可行方案

在Ubuntu虚拟机上搭建Samba共享,Windows主机连接该共享后继续使用Sublime Text编辑代码。需在Windows系统的C:\Users[用户名]路径下的全局.gitconfig文件中添加以下配置,避免Git权限警告:

[safe]
 directory = %(prefix)///192.168.56.101/[VM_shared_folder]/[My App]

注:%(prefix)为字面量,[VM_shared_folder]和[My App]需替换为实际的共享文件夹名与项目路径。


内容的提问来源于stack exchange,提问作者rubyrailzdevel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:55:20