問題
# 開發(fā)環(huán)境
<%= image_tag "icons/rails" %>
# => <img src="http://xxx-d07df70d4d655...a3d.jpg">
在開發(fā)環(huán)境下很正常,但是部署到服務(wù)器上,就出現(xiàn)問題了。
# 生產(chǎn)環(huán)境
<%= image_tag "icons/rails" %>
# => <img src="http://xxx.jpg">
過程
- 一開始看到網(wǎng)站沒有顯示圖片,但是css和js文件是有
digested url的,所以asset pipeline設(shè)置是沒問題的。 - 然后再去檢查資源編譯是否成功,在
/path/to/rails_app/public/assets/目錄下也有處理過的圖片資源。那么問題就定位在image_tag和image_url方法上。 -
image_url在ActionView::Helpers::AssetUrlHelper模塊中定義,ActionView::Base類include了該模塊,因此我們可以實(shí)例化一個(gè)ActionView::Base對(duì)象,在控制臺(tái)上測試這個(gè)方便些。在服務(wù)器上的Rails控制臺(tái)測試才知道,要加上后綴名才能生成正確的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"
解決辦法
因此,解決辦法就是修改所有調(diào)用image_url()方法的參數(shù),都帶上相應(yīng)圖片文件的后綴名。