生产环境未引用带指纹的静态资源,请求排查配置问题
问题排查与解决思路
检查manifest文件位置:Rails生产环境需要从
public/assets/.sprockets-manifest-xxx.json读取资源指纹映射。你提到manifest在current/assets_manifest_backup/目录下,这是错误的位置。确保预编译后manifest文件存放在public/assets目录下,Capistrano部署时不要移动或备份这个文件到其他路径。确认图片资源被纳入预编译:虽然Rails默认会预编译
app/assets/images下的所有文件,但如果你的图片在自定义目录,或者配置了config.assets.precompile覆盖了默认规则,需要确保union_15.png被包含。可以修改config/initializers/assets.rb,添加图片到预编译列表:Rails.application.config.assets.precompile += %w( initialise.css pdf.css union_15.png )或者更通用地包含所有图片:
Rails.application.config.assets.precompile += %w( *.png *.jpg *.gif )检查production.rb的assets配置:确保以下配置正确:
config.assets.digest = true # 启用指纹,生产环境默认开启,需确认未被修改 config.assets.compile = false # 生产环境禁用动态编译,依赖预编译文件 config.assets.prefix = '/assets' # 确保资源前缀是/assets,而非/images验证public/assets目录的文件完整性:登录服务器,检查
current/public/assets下是否存在union_15-xxx.png文件,以及对应的manifest文件。如果文件缺失,重新执行预编译并确保部署过程正确同步文件。检查image_tag的调用是否正确:确保没有在image_tag中指定
:src选项覆盖asset pipeline的路径,保持image_tag('union_15')的写法即可。
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

