はじめに
Railsを使った開発を以下のように進めていたのですが、railsコマンドが遅すぎたので、WSL上にプロジェクトファイルを移しました。
- Dockerを使って開発
- プロジェクトファイルはWindows上においていた
少し詰まったのと今後も似たようなことをやることが多くなりそうなので、備忘録として残します。
開発環境
- Rails8
- Ruby3.4
- Docker27.2.0
やりたいこと
- Windows側で開発を進めていたが、WSL側にファイルを移して開発を進めたい
- 背景
- rails s等の起動が非常に遅い
- 参考
やりかた
- WSL上にディレクトリを作成
- git cloneを実行
- docker compose buildでイメージをビルド
- docker compose up -d でコンテナを立ち上げ
- docker compose exec web /bin/bash でrails内に入る
- bin/rails db:create などの実行
- bin/dev を実行
- scssを反映させるために、devコマンドでdartsassによるコンパイルを実行
出たエラー
Rails用のコンテナが立ち上がらない
- エラー文
web-1 | tail: cannot open 'log/development.log' for reading: No such file or directory
web-1 | tail: no files remaining
- 前提:compose.yamlの記述内容
services:
db:
image: postgres
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
web:
build:
context: .
dockerfile: Dockerfile.development
command: bash -c "rm -f tmp/pids/server.pid && tail -f log/development.log" // ここでエラー
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
tty: true
stdin_open: true
volumes:
postgres_data:
- 原因
- git cloneで初期化下手だったのでlog/development.logが存在しなかった
- 背景
- よく見る起動コマンドには
rails s -b ‘0.0.0.0’が含まれているが、サーバーを立ち上げたり落としたりを頻繁にしたいので、抜いていた - 上記のコマンドを削除すると、自動的にコンテナが終了してしまうので、ログを参照するコマンドを入れていた
- よく見る起動コマンドには
- 対処法
-
tail -f log/development.logをrails s -b ‘0.0.0.0’に変更 -
docker compose up -dで再起動 -
docker compose exec web /bin/bashでコンテナ内に入る -
bundle installやbin/rails db:create,bin/rails db:migrate,bin/rails db:seedなどの実行 - log/development.logが自動で生成されるので、compose.yamlファイルを元に戻す
-