Rails 5无法显示/app/assets/images目录外图片的问题排查
解决Rails中image_tag调用public目录图片无法显示的问题
我来帮你排查这个问题,Rails的asset pipeline和静态文件路径经常会有这种容易踩的小坑,咱们一步步来解决:
修正image_tag的路径写法
你现在用的<%= image_tag("/public/pool_2.jpg") %>其实是错误的写法。Rails中,public目录是静态文件的根目录,当你直接引用public下的文件时,不需要加/public前缀。正确的写法应该是:<%= image_tag("pool_2.jpg") %>为什么会这样?因为你加了
/public前缀后,asset pipeline会把它当作assets目录下的子路径去查找,最终生成的HTML可能是<img src="/assets/public/pool_2.jpg">,但你的实际文件在/public/pool_2.jpg,路径不匹配自然显示不出来。验证生成的HTML路径
打开浏览器的开发者工具,查看这个img标签的src属性,确认是不是生成了错误的路径(比如带/assets/public/前缀)。如果是,那去掉/public前缀就能解决问题。如果需要将public文件纳入asset pipeline处理(比如指纹、压缩)
如果你希望这个图片被asset pipeline处理(比如生成带指纹的文件名用于缓存),除了已经把public加入assets.paths,还需要:- 保持
image_tag("pool_2.jpg")的写法,不要加前缀 - 在生产环境下,确保这个图片被预编译:在
config/initializers/assets.rb中添加:
然后运行Rails.application.config.assets.precompile += %w( pool_2.jpg )rails assets:precompile命令预编译资源
- 保持
清除asset缓存
有时候旧的编译缓存会导致路径异常,你可以运行以下命令清除缓存,然后重启服务器:rails assets:clobber
内容的提问来源于stack exchange,提问作者Kieu Hua
相关产品推荐
相关产品推荐

