【Docker】Webpacker::Manifest::MissingEntryError の解消方法【Rails】


直面したエラー

自分がgitにアップしているrailsアプリのリポジトリををクローンして、
Dockerにアップしてみようとdocker-compose upまで行い、
サーバーを起動してみると以下のエラーが発生しておりました。

Webpacker::Manifest::MissingEntryError in Devise::Sessions#new
 //中略//
1. You want to set webpacker.yml value of compile to true for your environment
   unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.

以下読み解いていきます。

原因解明

まずお決まりのDeepLにて翻訳すると、

Devise::Sessions#newでWebpacker::Manifest::MissingEntryErrorが発生する。

  1. webpacker.ymlのcompileの値は、あなたの環境に合わせてtrueに設定したい。
    webpack -w` または webpack-dev-server を使用している場合を除きます。
  2. webpack はまだアップデートを反映するために再実行されていません。
  3. Webpacker の config/webpacker.yml ファイルを間違って設定した。
  4. Webpack の設定がマニフェストを作成していない。

すこしわかりづらいがwebpacker周りで問題がある様子。

ググってみると以下の記事を発見
→https://yumishin.com/webpacker-error/

この記事はDocker環境ではないようだが、記事を読むと、

Webpacker.ymlがないことが原因。
Webpackerのインストールとコンパイルを行えばOK~
とのこと。

記事のようにターミナルで

##ターミナル
rails webpacker:install
rails webpacker:compile

を行うもエラーは続く。。。(compose upしなおしてもエラーでした)

もう少し詰めることに。

結論

結局ぐぐり続けていると以下の記事を発見
→https://my-programing-study.hatenablog.com/entry/2019/09/13/160609

どうやらdocker-compose.ymlにwebpackerがコンパイルするよう記述しなければいけないみたい。

以下をdocker-compose.ymlに追加

##docker-compose.yml
 webpacker:
    build: .
    command: bundle exec bin/webpack-dev-server
    volumes:
      - .:/favorite_spot
    ports:
      - "8000:8000"

これで作成済みのdockerのcontainerを削除してから

##ターミナル
docker-compose build --no-cache
docker-compose up

を実行しサーバーを立ち上げるとエラーが解消!

まとめると
1,Webpacker.ymlがないことが原因
2,それを作成するには、docker-compose.ymlにコンパイルに関する記述をしなければならない