rails7でrails newを実行するとDockerfileが上書きされてしまう...
rails7 + docker環境を構築していた際に、Dockerfileがrails newを実行すると上書きされてしまい、環境構築がなかなか進まなかったので記録を残します。
つまずきポイント
やっと、環境構築に必要な各ファイルの作成が終わり、以下コマンドを実行した。
docker compose run --rm web rails new . --force --no-deps --database=mysql
docker compose build
この時点ではうまくいっていたため、database.ymlを書き換え、DBの作成をした。
docker compose run --rm web rails db:create
すると、ここで
docker compose run --rm web rails db:create
[+] Running 1/0
⠿ Container rails_test-db-1 Created 0.0s
[+] Running 1/1
⠿ Container rails_test-db-1 Started 0.3s
/rails/bin/docker-entrypoint: line 8: exec: rails: not found
rails: not foundとエラーが発生。
いろいろ調べてみた結果、Dockerfileが上書きされていたことが原因だった。
rails7ではrails newした際に、production用のDockerfileが自動生成され、上書きされてしまうのだ...
なんたる仕様。
解決方法
初期で作成するDockerfileの名前をDockerfile.devに変更
docker-compose.ymlのbuildの部分を以下に書き換え
web: # アプリケーション名
build:
context: .
dockerfile: "Dockerfile.dev" ← Dockerfile.devを参照するように変更
この状態で、以下コマンドを実行
docker compose build --no-cache
その後、自動生成されたDockerfileの名前をDockerfile.prodに変更
再度、DBをcreate
docker-compose run --rm web rails db:create
[+] Running 1/0
⠿ Container rails_test-db-1 Running
Created database 'app_development'
Created database 'app_test'
DB createできました!