railsでcssに書いたpathはapplication.css内で解釈される

imageが表示されなかった

css内で

.example {
    background-image: image-url("hogehoge.png")
}

とか書いていたら本番環境で画像が表示されなかった

assetsの配信方法

ディレクトリ構成は↓みたいな感じ

sample-app
    app
        assets
            stylesheet
                application.css
    .
    .
    .
    public
        hogehoge.png

デプロイ時にはapp/assets配下を圧縮してCDNサーバーに配置してた

cssに書いたpathはapplication.css内で解釈される

imageが表示されなかった理由は

  • application.css無いでimage-urlが解釈される
  • application.cssのあるサーバーの/hogehoge.pngを探しに行く
  • 実際にはwebサーバーのpublic/hogehoge.pngに配置してあるので見つからない

のでうまくいっていなかった

解決方法としては

  • assets/にimageを置く => railsはassetファイルにhashをつけるのでjsからは読めない、rails内でimage-urlを使えば解決できる
  • 絶対パスで指定する
  • publicをCDNサーバーに配置する

とかがありそう、3つ目が良さそう