今日はRailsでとある挙動に悩まされていたけど、やっと原因が分かってスッキリしたので書いておく。
環境
- ruby 2.4.1
- Rails 5.1.4
前提
- Railsで画像ファイル等を使う場合、production環境だと
rake assets:precompile
が必要 - herokuはデプロイ時に
precompile
を勝手にやってくれる
ここまで知ってました。
今日あったこと
https://letsplaylist.genieus.co.jp/ のトップ画像
app/assets/images/hero.jpeg
に入れてあった
scssでは問題なく使えている
background-image: image-url("hero.jpeg");
erbで画像パスを使いたい
<%= image_url('hero.jpeg') %>
と書いてデプロイした
Twitterカードの対応で、画像パスをhtmlに埋め込みたかった
なぜかエラー
ActionView::Template::Error (The asset "hero.jpeg" is not present in the asset pipeline.):
(ここで数時間の)無駄な調査
- herokuのproduction、staging環境ではいつも
image_url
使っているので、ReviewAppが悪いのではないかと勘違いする - ReviewAppのデプロイログを確認する
assets:precompile
実行されている
- そもそもTOP画像はちゃんと出ている
- なぜだ
- みたいな感じで時間がかかる
実ファイル見てみよう
herokuは動作中の環境にssh接続できる
heroku run bash -a letsplaylist-staging-pr-116
~ $ ls public/assets/ 省略〜〜 hero-d80ba23233558abbd91f408cf7c9c178d645bd0cb2ddbffe387ace3f071a1b7b.jpg
拡張子が!!!変わってる!!!!
.jpeg
-> .jpg
これはsprocketsの仕様みたい
マジかよ・・・知らんかった・・・
まとめ
.jpeg
は使うのやめよう- scssは変換してくれるんですね・・・