問題
画像を以下のように指定しており、ローカル環境(development)では正常に動作していた
画像のパスは、app/assets/images/
<%= image_tag('gazou.png', :width =>'112', :height =>'auto', :alt => '画像') %>
しかし! 本番環境では、表示されない…
ブラウザの開発者モードで見るかぎりパスが違っている様子
解決策
asset_path()
を使用する
<%= image_tag asset_path('gazou.png', :width =>'112', :height =>'auto', :alt => '画像') %>
原因
どうやら、本番環境(production環境)では、画像もコンパイルされる模様。
本番環境と開発環境での違いは、
- パスが変わる(app/assets/images/gazou.png => /assets/gazou.png)
- 名前が変わる(gazou.png => gazou-xxx… .png) ※xxx… はdigest
の2点。
両方に対応するための、asset_path()
Rails4での assets:precompile
productionにdeployするときに実行する assets:precompile
ですが、
Rails4からは digest無しのjs, css, image は作成しない仕様になったようです
digestとはjs, css, 画像等を assets:precompile
するとファイル名の後ろにつく文字列のこと
そのため、Railsが提供している関数asset_path()
を呼ぶことで、productionのときにはdigestを勝手に付与してもらうようにする。