はしばみあきら blog

プログラミングアウトプットするブログ。202010スタート

【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を一旦削除してみました

するととりあえず追加したcssとjsのプリコンパイルは成功

ということはやはり画像表示で何かおかしくなってるな?

やってみたこと

  • 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が表示されました

ただこれだと別の画像を追加して行った時に結局プリコンパイルできないよね?って話になりますね...

とりあえず表示だけはできるようになりました

もっとこの辺は理解していかないとだなぁ