LoginSignup
9
6

More than 3 years have passed since last update.

[Rails][docker]Please run `yarn install --check-files`を解決する

Last updated at Posted at 2020-11-15

docker使用時に以下のエラーについてけっこーハマってしまったので備忘録です。

【環境】

・Ruby 2.7.1
・Rails 6.0.3.4
・Docker

Dockerfile

FROM ruby:2.7.1
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
    && apt-get update -qq \
    && apt-get install -y nodejs yarn \
    && mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]

現象

チーム開発にてgitに上がっている環境をローカルへclone。
docker-compose up を実行する際にdockerコンテナが落ちてしまう現象がありました。logを確認してみると、以下yarnのエラーがありました。

error Couldn't find an integrity file
error Found 1 errors.


========================================
  Your Yarn packages are out of date!
  Please run `yarn install --check-files` to update.
========================================


To disable this check, please change `check_yarn_integrity`
to `false` in your webpacker config file (config/webpacker.yml).


※対処方法/結論に急ぎたい方は一番下までスクロールしてください。(長いので)

はじめに、このエラーの対処方法として以下の記事を参考にさせていただき
下記の変更を採用していました。
https://qiita.com/KenAra/items/2708ce3d5c80c4f24920

config/webpacker.yml
# Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
check_yarn_integrity: false  #yarnチェックしないように変更

無事この対応でdocker起動→rails画面も表示されました。

スクリーンショット 2020-11-15 16.47.27.jpg

しかし、安心していたのも束の間でした。

Scaffoldでモデル生成→rails db:migrate
よし、index画面確認してみよう あ..

スクリーンショット 2020-11-09 15.02.32.jpg

このエラーの対処法として、下記記事やIssueを参考にさせていただきました。
https://qiita.com/natecotus/items/a2bd9f3ebd5b1866d48e
https://qiita.com/takuma_0625/items/2709f81ffa005fde2188
https://github.com/rails/webpacker/issues/2071

docker-compose web bashでDocker内に入り下記インストールを実行しました。

rails webpacker:install

はい、無事にエラーが解消され、再びrails画面を確認することができました。

上記コマンド実行した際に、何が変更されたか差分を確認してみました。

config/webpacker.yml
# Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
check_yarn_integrity: true

これだけでした。しかも・・あれ?戻ってるな・・

yarnのエラー解消した際に変更した内容はなんだったのか。
最初のエラー発生原因が謎になってしまいました。
更に、この対処方法だけだと再度cloneした場合、最初のyarnの問題が再発しそう・・と気付き、気になったので再調査を実施。

下記を参考にさせていただき、再度cloneした別環境で
「Webpacker::Manifest::MissingEntryError」が起きた後に以下コマンドを実行しました。
https://qiita.com/ashketcham/items/48d64e960d436f8b6f78

$ docker-compose run --rm web yarn install 

→はい、こちらでも問題が解消できました。
先輩方、ありがとうございます。

なぜ $ rails webpacker:install を実行したことで解決できたのか?
実行時のlogを確認してみたところ理解できました。
webpacker:install実行時にもyarn installを同時に実行していました。

結論へ・・・
この対処法ってdocker-compose runするときにyarn installしているのだから
本件のタイトル
「Please run yarn install --check-files to update.」
の発生前に
$ docker-compose run --rm web yarn install
を実行してれば問題なかったんじゃないのであろうか。

ということで
→コミット戻して確認しました。

結論

docker-compose up でコンテナ起動せずlogにて以下エラー起きた場合

========================================
  Your Yarn packages are out of date!
  Please run `yarn install --check-files` to update.
========================================

以下コマンド(docker起動時でのyarn install)を実行で解決できました。

$ docker-compose run --rm web yarn install

原因と感想

読み返してみると。Yarnのパッケージが古いよ!って怒られてますね。
docker runでimage構築→起動時に同時にyarnパッケージを更新すれば良いだけだったようす。

以上です。

以下の2点が確認できたことから
yarn install自体はdocker image,コンテナを作る際に反映されてると推察しました。
・yarn install実行前後をdiffで確認しても環境内のファイルに差分が見つからなかった。
・cloneした環境を起動する際のみ発生する。

※おそらくDockerfile、docker-compose.ymlにYarnが更新できるように書き換えてあげれば、この問題は発生しなさそう。

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6