Rails生产环境报“资产管道中不存在图片”错误但开发环境运行正常
排查方案
- 先执行生产环境强制预编译验证:在生产服务器项目根目录执行
RAILS_ENV=production bundle exec rake assets:precompile,完成后执行ls public/assets | grep logo-white-no-background检查是否生成了对应带哈希戳的图片文件,如果存在就重启应用服务验证报错是否消失。 - 核对生产环境资产配置:打开config/environments/production.rb文件,确认以下配置:
config.assets.precompile是否包含你存放该图片的目录,默认仅预编译app/assets/images下的资源,如果你把图片放在了vendor/assets或者自定义的资源目录,需要手动将目录加入预编译列表- 不要开启
config.assets.compile动态编译,该配置会大幅降低生产环境性能,也会掩盖预编译配置问题
- 解决文件名后缀兼容问题:开发环境默认开启动态资源查找,会自动匹配后缀名,生产环境预编译后资源会带哈希戳,无后缀的匹配逻辑会失效。你提到加后缀开发环境报错,是本地资产缓存导致的,先执行
bundle exec rake assets:clobber清理本地缓存,再给image_tag补全正确的文件后缀(比如.png/.svg),测试开发环境正常后再推送生产。 - 排查部署流程缓存问题:如果用了Capistrano、Docker等部署方式,确认部署流程是否会清理旧的预编译产物、是否正确拉取了最新的图片文件到服务器对应资源目录,避免用旧缓存的assets目录覆盖新文件。
内容的提问来源于stack exchange,提问作者pinkfloyd90
相关产品推荐
相关产品推荐

