0
0

1. リポジトリを作成する

スクリーンショット 2024-06-11 16.24.06.png

rails newするとREADME.mdも作成されるので、この時はチェックしなくてもいいと思います。

2. 任意のディレクトリで Clone & CD

zsh
git clone git@github.com:yoshiki1007/rails7-todo.git
Cloning into 'rails7-todo'...
warning: You appear to have cloned an empty repository.

空のリポジトリをクローンしたというメッセージが出ますが、実際に空ですので問題ありません。

zsh
cd rails7-todo/

必要なファイルを作成する

Dockerfile

zsh
vi Dockerfile

Rails7からサーバーを起動するコマンドが変わったので、CMDには["./bin/dev"]を使用します。

Dockerfile
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

zsh
vi docker-compose.yml

今までdocker-compose.ymlの最上部でバージョン指定していましたが、廃止になったようです。

また、webのcommandはDockerfileに寄せます。

docker-compose.yml
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

zsh
vi entrypoint.sh

ここでserver.pidを削除するようにしています。

entrypoint.sh
#!/bin/bash
set -e

rm -f /rails-todo/tmp/pids/server.pid

exec "$@"

Gemfile

zsh
vi Gemfile

Railsの7.xバージョンの最新の安定版をインストールします。

Gemfile
source 'https://rubygems.org'
gem 'rails', '~>7'

Gemfile.lock

空のGemfile.lockを作成します。

zsh
touch Gemfile.lock

確認

全てのファイルが作成されていることを確認します。

zsh
ls
Dockerfile		Gemfile			Gemfile.lock		docker-compose.yml	entrypoint.sh

この後rails newすると色々とファイルの追加、変更があるため
僕の場合はいつでも戻れるように一旦ここでgit commitします。

rails new する

zsh
docker compose run web rails new . -j importmap -d mysql --css tailwind --skip-system-test
  1. -j importmap: Importmapを使用する
  2. -d mysql: MySQLを設定する
  3. --css tailwind: Tailwind CSSをインストールする
  4. --skip-system-test: 後にRSpecをインストールする

rauls newを実行すると途中で何度か、ファイルをオーバーライドするか聞かれます。

Dockerfileはn
その他は全てEnter(Y)します。

zsh
 ✔ 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

zsh
docker compose build

コンテナ立ち上げ

zsh
docker compose up
# or
docker compose up -d

Contaienr name 確認

zsh
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を確認し、以降使用します。

ログに接続

zsh
docker attach rails7-todo-web-1

コンテナに入る

zsh
docker exec -it rails7-todo-web-1 /bin/bash

DB構築

このままではDBに接続できないので、database.ymlを修正します。

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作成

zsh
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を追加します。

Procfile.dev
web: bin/rails server -b 0.0.0.0
css: bin/rails tailwindcss:watch

完成

スクリーンショット 2024-06-11 18.27.29.png

0
0
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
0
0