【Rails】プリコンパイル時のundefined method `[]' for nil:NilClass
デプロイしたアプリをローカルで更新し、AWSのEC2でプリコンパイルしようとした時にエラーが出ました
アセット以下をEC2のアプリ上でプリコンパイル
$ bundle exec rails assets:precompile RAILS_ENV=production
すると、成功できずメッセージがでます
[1/4] Resolving packages... success Already up-to-date. Done in 0.05s. rails aborted! NoMethodError: undefined method `[]' for nil:NilClass
??? つまりどういうことやねん!
日本語の記事でも外国の記事でも多いのは環境変数が渡せてなくてnilになっているのでは?とのこと
しかし前回からの変更で環境変数は特に触ってないからここではないのかな、と
思い当たるとろこで、前回から変更したview側のimgタグと、css側のbackground-imageを一旦削除してみました
ということはやはり画像表示で何かおかしくなってるな?
やってみたこと
- viewのimageタグとscssのbackground-imageを消した
プリコンパイルはできるようになりました
でも当然画面に画像は出てきません。。。次
- app/assets/imagesの画像をpublic/imagesに移動してみた
view側の
= image_tag asset_path('ika.png')
ここは本番環境でも表示されるように
だけどCSS側
background-image: image-url("/images/sangaku.jpg");
プリコンパイルに失敗します ちなみに
background-image: url("/images/sangaku.jpg");
これだとプリコンパイル成功
image-urlとすることでパスを読むことができなくなってninが出ている??
- viewにstyleを直書きしてみた
#room-group style="background-image: url( #{asset_path"sangaku.jpg"})"
image_tagのasset_pathが使えるならこれでできるのでは?という考え
結果としてはbackgroundが表示されました
ただこれだと別の画像を追加して行った時に結局プリコンパイルできないよね?って話になりますね...
とりあえず表示だけはできるようになりました
もっとこの辺は理解していかないとだなぁ