问题
# 开发环境
<%= image_tag "icons/rails" %>
# => <img src="http://xxx-d07df70d4d655...a3d.jpg">
在开发环境下很正常,但是部署到服务器上,就出现问题了。
# 生产环境
<%= image_tag "icons/rails" %>
# => <img src="http://xxx.jpg">
过程
- 一开始看到网站没有显示图片,但是css和js文件是有
digested url
的,所以asset pipeline
设置是没问题的。 - 然后再去检查资源编译是否成功,在
/path/to/rails_app/public/assets/
目录下也有处理过的图片资源。那么问题就定位在image_tag
和image_url
方法上。 -
image_url
在ActionView::Helpers::AssetUrlHelper
模块中定义,ActionView::Base
类include
了该模块,因此我们可以实例化一个ActionView::Base
对象,在控制台上测试这个方便些。在服务器上的Rails控制台测试才知道,要加上后缀名才能生成正确的digested url
。
> ActionView::Base.new.image_url('common_header')
=> "/images/common_header"
> ActionView::Base.new.image_url('common_header.jpg')
=> "/assets/common_header-4187405b...32b.jpg"
解决办法
因此,解决办法就是修改所有调用image_url()方法的参数,都带上相应图片文件的后缀名。