前提
DockerでRuby on Railsの開発環境を構築しています。
私のローカルの環境は下記の通りです。
- Windows10
- Docker19.03.8
また、環境構築に用意したファイル群のコードは下記のページの内容をコピペしました。
また、下記の内容を変更をしました。
- Rubyのバージョンを2.7.1に変更
- Dockerfileの
WORKDIR
の内容を変数${appname}にして、appnameの値をsampleに設定
発生している問題・エラーメッセージ
Dockerのドキュメントの手順に倣い、config/database.yml
を編集したのちにターミナルでdocker-compose up
を実行しましたが、下記のエラーが表示されます。
略 web_1 | yarn: error: no such option: --integrity web_1 | web_1 | web_1 | ======================================== web_1 | Your Yarn packages are out of date! web_1 | Please run `yarn install --check-files` to update. web_1 | ======================================== web_1 | web_1 | web_1 | To disable this check, please change `check_yarn_integrity` web_1 | to `false` in your webpacker config file (config/webpacker.yml). 略
また、docker-compose run web rake db:create
を実行しても、同じ内容の下記のエラーが表示されます。
Starting sample_db_1 ... done Usage: yarn [options] yarn: error: no such option: --integrity ======================================== 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).
実現したいこと
上記のエラーを解決し、Yay! You're on Rails!
ページを開きたいです。
試したこと
エラーメッセージで提示されている諸々の方策を実行しました。
- yarn install --check-files
実行後にdocker-compose up
したものの、エラー内容に変化がありませんでした。
- change
check_yarn_integrity
tofalse
config/webpacker.ymlを確認したら、既にfalseになっていました。
そのほか下記も実行しました。
- yarn: error: no such option: --integrityをググる
エラー文と一致するページを見つけられませんでした。
yarn install
とyarn upgrade
を実行する
エラー内容が一致しているわけではありませんが、似たような内容が表示された場合の解決策を記載されている記事を見つけました ↓
Rails6 開発時につまづきそうな webpacker, yarn 関係のエラーと解決方法 - Qiita
その中にまだ試していない方法で、yarn install
またはyarn upgrade
を実行する方法があったので実行しました。
結果、エラーの内容に変化はありませんでした。
解決にあたり必要な情報やそのほか試すことなどがあれば、お手数ですがコメントください。
ソースコード
Dockerfile
1FROM ruby:2.7.1 2RUN apt-get update -qq && apt-get install -y nodejs postgresql-client imagemagick yarn 3ENV appname /sample 4RUN mkdir ${appname} 5WORKDIR ${appname} 6COPY Gemfile ${appname}/Gemfile 7COPY Gemfile.lock ${appname}/Gemfile.lock 8RUN bundle install 9COPY . ${appname} 10 11COPY entrypoint.sh /usr/bin/ 12RUN chmod +x /usr/bin/entrypoint.sh 13ENTRYPOINT ["entrypoint.sh"] 14EXPOSE 3000 15 16CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.yml
yml
1version: "3" 2services: 3 db: 4 image: postgres 5 volumes: 6 - ./tmp/db:/var/lib/postgresql/data 7 environment: 8 POSTGRES_USER: postgres 9 POSTGRES_PASSWORD: postgres 10 web: 11 stdin_open: true 12 tty: true 13 build: . 14 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 15 volumes: 16 - .:/sample 17 ports: 18 - "3000:3000" 19 depends_on: 20 - db
Gemfile
1source 'https://rubygems.org' 2gem 'rails', '~>5'
entrypoint.sh
sh
1#!/bin/bash 2set -e 3 4# Remove a potentially pre-existing server.pid for Rails. 5rm -f /sample/tmp/pids/server.pid 6 7# Then exec the container's main process (what's set as CMD in the Dockerfile). 8exec "$@"
config/database.yml
yml
1default: &default 2 adapter: postgresql 3 encoding: unicode 4 host: db 5 username: postgres 6 password: 7 pool: 5 8 9development: 10 <<: *default 11 database: myapp_development 12 13 14test: 15 <<: *default 16 database: myapp_test
不可解なこと
Gemfile
1source 'https://rubygems.org' 2gem 'rails', '~>5'
と書いてあるのでRails5がインストールされるのかと思ったのですが、docker-compose run web rails new . --force --no-deps --database=postgresql
実行後のGemfileを確認すると、Rails6をインストールしているように見受けられます。
Gemfile
1略 2ruby '2.7.1' 3 4# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' 5gem 'rails', '~> 6.0.2', '>= 6.0.2.2' 6# Use postgresql as the database for Active Record 7gem 'pg', '>= 0.18', '< 2.0' 8# Use Puma as the app server 9gem 'puma', '~> 4.1' 10# Use SCSS for stylesheets 11gem 'sass-rails', '>= 6' 12# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker 13gem 'webpacker', '~> 4.0' 14略
Rails6はyarnが必須になるとどこかの記事で読んだので、Rails6になっていることに何か原因があるかもしれません。
とはいえyarnコマンドが実行できることから、yarnはインストールされているようです。
しかし、Dockerfileではyarnをインストールする記述はしていません。
あなたの回答
tips
プレビュー