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

Rails 7开发环境下Stimulus及CSS资源摘要缓存异常问题

Rails 7开发环境资源修改后404(旧摘要路径问题)

问题场景

  • 使用Rails 7默认配置(Import Maps + Stimulus),本地Puma服务器开发环境
  • 修改app/javascript/editor/section.js后,浏览器和Puma抛出404,请求旧摘要的JS文件
  • 补充案例:使用dartsass-rails gem,运行bin/rails dartsass:watch,修改Sass文件后同样出现旧摘要CSS文件的404错误
  • 已禁用浏览器HTTP缓存,问题仍存在;重启Puma可临时解决

错误示例:

浏览器控制台报错:

GET http://localhost:3000/assets/editor/section-ca5da14b07bf02053399e5391d999b5870acc0d8783bb5d7844ce5a22f2278da.js 
net::ERR_ABORTED 404 (Not Found)

Puma控制台报错:

ActionController::RoutingError (No route matches [GET] "/assets/editor/section-ca5da14b07bf02053399e5391d999b5870acc0d8783bb5d7844ce5a22f2278da.js"):

解决方案

1. 关闭开发环境的资源摘要缓存

修改config/environments/development.rb,添加或调整配置:

config.assets.digest = false

开发环境下无需带摘要的资源路径,关闭后直接引用文件名,避免摘要不匹配问题。

2. 确保资源监听机制正常工作

确认开发环境启用了资源监听,在config/environments/development.rb中:

config.assets.watch = true # 默认已开启,可确认配置
# 调整缓存存储,避免内存缓存导致的更新延迟
config.assets.configure do |env|
  env.cache = ActiveSupport::Cache.lookup_store(:memory_store, size: 64.megabytes)
end

3. 处理Dart Sass监听进程问题

如果使用dartsass-rails,修改Sass后未触发编译,尝试:

  • 重启bin/rails dartsass:watch进程
  • 若为Linux系统,调整inotify文件监听限制(解决文件变更无法被捕获的问题):
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

4. 手动清除资源缓存

执行命令清除旧的资源缓存,避免残留的旧摘要信息:

bin/rails assets:clean
bin/rails assets:clobber

5. 确认Asset Reloader中间件加载

确保开发环境加载了资源重载中间件,在config/environments/development.rb中:

config.middleware.use Rails::Middleware::AssetReloader

问题原因

开发环境中,Rails Asset Pipeline会缓存资源文件的摘要哈希值,当文件修改后,资源监听进程可能未及时更新缓存,导致Puma仍使用旧摘要生成资源路径,而新文件的摘要已变更,最终引发404错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:55:23