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

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会通过预编译生成的清单文件自动映射到带哈希的资产路径。
  • 验证资产预编译与清单文件

    1. 部署时确保执行了预编译命令:
      RAILS_ENV=production rails assets:precompile
      
    2. 检查清单文件中是否存在目标资产的条目:
      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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:17:16