Showing /myapp/app/views/layouts/application.html.erb where line #20 raised:
Webpacker can't find application in /myapp/public/packs/manifest.json. Possible causes:
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.
Your manifest contains:
{
application.html.erbの20行目
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
開発環境でだけページを開こうとすると上記のエラーが出る。
環境
Dockerを使用しており、本番環境ではruby:2.6.6-alpine3.11のイメージを、開発環境ではruby:2.6.6のイメージを使用していた。(本当は開発環境と本番環境でイメージ変えるのよくないとのこと。)
原因
開発環境用のDockerfile
FROM ruby:2.6.6
RUN apt-get update && apt-get install -y yarn \
...
本番環境用のDockerfile
FROM ruby:2.6.6-alpine3.11
RUN apk --no-cache add yarn \
...
yarnのインストールについて上記のように記載していたが、イメージによってデフォルトでインストールされるバージョンが決まっているっぽい??(特に指定しなければどのOSでも最新のものが入ると思っていた)
それぞれのコンテナでバージョンを確認すると違うyarnがインストールされているようで、開発環境では
ERROR: There are no scenarios; must have at least one.
となっていてnodejsもインストールできてなさそうだった。
解決策
(OS名) to (パッケージ名)
等で検索して公式のダウンロード方法を調べる
↓
今回参考にさせていただいた記事
Debian/Ubuntuにnodejsとyarnをinstall
パッケージマネージャを利用した Node.js のインストール
公式のDebian と Ubuntu ベースの Linux ディストリビューション、エンタープライズ Linux/Fedora と Snap パッケージ
部分を参考にする。→Node.js 公式のバイナリディストリビューションのリンクが貼ってあるので遷移。
Node.js v14.x:
# Using Debian, as root
curl -fsSL https://deb.nodesource.com/setup_12.x | bash -
apt-get install -y nodejs
この部分をDockerfileに記載する。
↓最終的にDockerfileはこんな感じに
RUN curl -fsSL https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get update && apt-get install -y nodejs
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update && apt-get install -y yarn
それでもエラーが解消されない
ビルドしなおしたのに
Webpacker::Manifest::MissingEntryError
上記のエラーが出る。
# yarn -v
1.22.5
# node -v
v12.22.1
バージョン確認するとnodejsとyarnはちゃんと入ってそう。
解決策
どうやらwebpackerがインストールされていないっぽい。rails webpacker:install
を実行すると解決。
余談
このコマンドrails webpacker:install
が必要になったのは上でだけで開発環境上でだけで、ステージング本番環境共にwebpackerをインストールしなくてもエラーは出いない様子...。なぜかわかる方いらっしゃれば教えてもらえると助かります。。