【210607追記】Rails6でSprockets::Rails::Helper::AssetNotPrecompiled が出てアセットプリコンパイルができない

アセットのプリコンパイルができませんでした。

プリコンパイルを実行しても、エラーが出てしまいます。

$ docker-compose run app rails assets:precompile

Sprockets::Rails::Helper::AssetNotPrecompiled

結論

コンパイル済みファイルがおかしくなってた。そこでひっかかってprecompileができていなかった。


解決策←追記20210607

$ docker-compose run app rails assets:clean
$ docker-compose run app rails assets:clobber

同じ事象が出たので、assets:clobberでプリコンパイルしたコンテナ内のコンパイル済みファイル一式を削除し、再プリコンパイルしたら解決しました!

$ docker-compose run app rails assets:precompile

よかったよかった😌


環境

  • Rails6
  • Ubuntu
  • Docker

最初は、あれ?config/initializers/assets.rbの設定変えたかな?とか見てみましたが、何も変わってないし、ここ最近変更された形式もない。

んー、でもさっきまで動いてたし、これはきっとサーバー側だなあなんて思いつつ、念の為Dockerの容量確認したりprune(使ってないイメージとか削除してくれる)したり、

$ docker-compose build --no-cache

とかしたんですが、まあ全然だめ。なんにも変わらない。
buildまでしてだめとは・・・

というわけで、面倒だけど、Gitでがっつり過去にさかのぼってみる。
Rails内のエラーなのか、サーバ側ののエラーなのかを切り分けるため。

そうすると、なんと、ずいぶん前のSVGの追加前後で挙動がかわった。
これはもう絶対SVGだよなあ、と、最新のコミットに戻ってSVGファイルを消してみたらエラーが解消。assetも更新され、無事に動きました。
なんじゃそりゃ。もちろん画像は表示されない。てか画像のリンクが切れててもprecompileは走るのね。

しかし、まあここまでは理解できるんだけど、納得いかないのは一度削除したファイルをgitでdiscard changesしてやったら戻す(削除をなかったことにする)と、画像がちゃんと表示された。

これはもうわからない。なにこれ。助けてトナカイ。

パイプラインに汚れがついて詰まってたみたいな、そういう話なんですか?
解決したのに納得できない。

クリスマスイブにこんなことで悩みたくなかったなあ。

おわり☠

公開日