【Rails】本番環境でのみ画像が表示されない

問題

画像を以下のように指定しており、ローカル環境(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を勝手に付与してもらうようにする。

タイトルとURLをコピーしました