Ubuntu环境下Apache/Passenger为何不向浏览器提供更新后的内容?
React/Rails 6部署后页面无更新问题解答
Apache 和 Passenger 均存在缓存机制,是导致问题的常见原因
Apache 端缓存
- Apache 默认可能通过
mod_cache、mod_expires模块启用静态资源缓存,编译后的JS、CSS等文件会被Apache或浏览器缓存。如果你的React编译产物文件名没有带哈希后缀(比如仅命名为main.js而非main.7f9d2a.js),服务器和浏览器会判定文件未变更,继续使用旧缓存。 - 可检查Apache配置文件,查看是否存在
CacheEnable、ExpiresByType这类控制缓存时长的指令。
Passenger 端缓存
- Passenger 会缓存Rails应用的已加载代码与类,但针对前端React代码,核心问题通常是是否重新编译静态资源:部署时若未执行
RAILS_ENV=production rails assets:precompile,Passenger会继续使用旧的编译产物。 - 即便重启Apache,Passenger的应用进程可能未完全重启,可手动执行命令强制重启应用:
passenger-config restart-app /path/to/your/rails/app
其他需排查的点
- 浏览器本地缓存:服务器端更新后,浏览器可能仍保留旧文件,可通过
Ctrl+Shift+R强制刷新,或打开开发者工具(F12)在「网络」选项卡勾选「禁用缓存」后刷新页面。 - 静态资源编译遗漏:务必在生产环境下重新编译前端资源,确保更新后的JSX代码被编译为最新的静态文件。
- 部署路径错误:确认更新后的源码已上传至Apache配置指定的应用目录,避免传错位置导致服务器仍读取旧文件。
内容的提问来源于stack exchange,提问作者d-yada
相关产品推荐
相关产品推荐

