Rails 7资产管道异常排查:生产环境资产存在却报错?
生产环境资产管道报错解决方案
问题描述
开发环境应用运行正常,部署到生产环境后日志报错:
ActionView::Template::Error (The asset "dfull" is not present in the asset pipeline.
但实际在/current/public/assets目录下存在带哈希后缀的资产文件:
cd /current/public/assets ls -al df* # 输出:dfull-7c187c14af3a8d29e060e48047ead45a136397c74d0208519e6d128c1097a283.png
解决步骤
修正视图中的资产引用方式
生产环境必须使用Rails官方资产辅助方法,不能直接硬编码路径:- 正确写法:
<%= image_tag('dfull.png') %>或<%= asset_path('dfull.png') %> - 错误写法:
<img src="/assets/dfull.png">(无法匹配带哈希的资产文件)
Rails会通过预编译生成的清单文件自动映射到带哈希的资产路径。
- 正确写法:
验证资产预编译与清单文件
- 部署时确保执行了预编译命令:
RAILS_ENV=production rails assets:precompile - 检查清单文件中是否存在目标资产的条目:
如果没有找到对应条目,说明预编译未正确生成映射,需重新执行预编译。cat public/assets/.sprockets-manifest-*.json | grep dfull
- 部署时确保执行了预编译命令:
清理旧资产并重新预编译
旧资产或缓存可能导致冲突,执行以下操作:rm -rf public/assets/* RAILS_ENV=production rails assets:precompile检查生产环境资产配置
打开config/environments/production.rb,确保以下配置正确:config.assets.compile = false # 生产环境禁用实时编译,依赖预编译资产 config.assets.digest = true # 启用资产哈希后缀,必须开启才能匹配带哈希的文件若
config.assets.compile设为true,虽能临时解决,但会降低生产环境性能,不推荐。核对文件名的准确性
确认视图中引用的文件名与实际文件完全一致:- 注意大小写(生产环境文件名区分大小写)
- 必须包含完整扩展名(比如不能只写
dfull,要写dfull.png)
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

