Public

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

※本記事には広告・アフィリエイトリンクが含まれます

Ruby/Rails Rails
t-salad t-salad committed b2ee18c

問題

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

スポンサーリンク
スポンサーリンク
★ この記事をXでシェア はてなブックマーク
関連記事