1. リポジトリを作成する
rails new
するとREADME.md
も作成されるので、この時はチェックしなくてもいいと思います。
2. 任意のディレクトリで Clone & CD
git clone git@github.com:yoshiki1007/rails7-todo.git
Cloning into 'rails7-todo'...
warning: You appear to have cloned an empty repository.
空のリポジトリをクローンしたというメッセージが出ますが、実際に空ですので問題ありません。
cd rails7-todo/
必要なファイルを作成する
Dockerfile
vi Dockerfile
Rails7からサーバーを起動するコマンドが変わったので、CMDには["./bin/dev"]
を使用します。
FROM ruby:3.2.4
ENV ROOT="/rails-todo"
ENV LANG=C.UTF-8
ENV TZ=Asia/Tokyo
RUN apt update -qq && apt install -y mariadb-client vim
RUN mkdir ${ROOT}
WORKDIR ${ROOT}
COPY Gemfile ${ROOT}/Gemfile
COPY Gemfile.lock ${ROOT}/Gemfile.lock
RUN bundle install
COPY . ${ROOT}
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["./bin/dev"]
docker-compose.yml
vi docker-compose.yml
今までdocker-compose.yml
の最上部でバージョン指定していましたが、廃止になったようです。
また、webのcommandはDockerfile
に寄せます。
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
TZ: "Asia/Tokyo"
ports:
- '3306:3306'
command: --default-authentication-plugin=mysql_native_password
volumes:
- mysql-data:/var/lib/mysql
web:
build: .
volumes:
- .:/rails-todo
ports:
- "3000:3000"
depends_on:
- db
stdin_open: true
tty: true
volumes:
mysql-data:
driver: local
entrypoint.sh
vi entrypoint.sh
ここでserver.pid
を削除するようにしています。
#!/bin/bash
set -e
rm -f /rails-todo/tmp/pids/server.pid
exec "$@"
Gemfile
vi Gemfile
Railsの7.xバージョンの最新の安定版をインストールします。
source 'https://rubygems.org'
gem 'rails', '~>7'
Gemfile.lock
空のGemfile.lock
を作成します。
touch Gemfile.lock
確認
全てのファイルが作成されていることを確認します。
ls
Dockerfile Gemfile Gemfile.lock docker-compose.yml entrypoint.sh
この後rails new
すると色々とファイルの追加、変更があるため
僕の場合はいつでも戻れるように一旦ここでgit commit
します。
rails new する
docker compose run web rails new . -j importmap -d mysql --css tailwind --skip-system-test
-
-j importmap
: Importmapを使用する -
-d mysql
: MySQLを設定する -
--css tailwind
: Tailwind CSSをインストールする -
--skip-system-test
: 後にRSpecをインストールする
rauls new
を実行すると途中で何度か、ファイルをオーバーライドするか聞かれます。
Dockerfileはn
その他は全てEnter(Y)します。
✔ Container rails7-todo-db-1 Started 0.4s
exist
create README.md
create Rakefile
create .ruby-version
create config.ru
create .gitignore
create .gitattributes
conflict Gemfile
Overwrite /rails-todo/Gemfile? (enter "h" for help) [Ynaqdhm]
imageのbuild
docker compose build
コンテナ立ち上げ
docker compose up
# or
docker compose up -d
Contaienr name 確認
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
068e7015eaab rails7-todo-web "entrypoint.sh ./bin…" About a minute ago Up 8 seconds 0.0.0.0:3000->3000/tcp rails7-todo-web-1
f0eb681ff83d mysql:8.0 "docker-entrypoint.s…" 4 minutes ago Up 8 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp rails7-todo-db-1
NAMESのrails7-todo-web-1を確認し、以降使用します。
ログに接続
docker attach rails7-todo-web-1
コンテナに入る
docker exec -it rails7-todo-web-1 /bin/bash
DB構築
このままではDBに接続できないので、database.yml
を修正します。
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: <%= ENV.fetch("MYSQL_USERNAME", "root") %>
password: <%= ENV.fetch("MYSQL_PASSWORD", "password") %>
host: <%= ENV.fetch("MYSQL_HOST", "db") %>
development:
<<: *default
database: rails_todo_development
DB作成
root@068e7015eaab:/rails-todo# rails db:create
Created database 'rails_todo_development'
Created database 'rails_todo_test'
Procfile.devの修正
作成されたProcfile.dev
では画面を表示できなかったため、-b 0.0.0.0
を追加します。
web: bin/rails server -b 0.0.0.0
css: bin/rails tailwindcss:watch