LoginSignup
4
1

More than 1 year has passed since last update.

DockerでRails7プロジェクト作成する方法 Rails7 + Mysql + esbuild + tailwind + pry-rails(デバッグツール)

Last updated at Posted at 2022-02-10

Dockerfile作成

まずはruby3とnodejsを使えるようにする

FROM ruby:3.0

ENV APP /app
RUN mkdir -p $APP && \
    apt-get update -y && \
    apt-get install default-mysql-client nodejs npm -y && \
    npm uninstall yarn -g && \
    npm install yarn -g -y
COPY . $APP/

WORKDIR $APP

docker-compose.yml作成

docker-compose.yml
version: '3'
services:
  app:
    restart: always
    build:
      context: .
    volumes:
      - .:/app

イメージビルド実行

docker-compose build

イメージビルドの確認

docker images

イメージが作成されていればOK

dockerにRails7インストール

# コンテナに入る
docker-compose run app sh

# Rails7インストール
gem i -v 7.0 rails

プロジェクト作成

ディレクトリ名を . とすると現在のディレクトリ直下にプロジェクト作成可能

rails new . -d mysql --javascript esbuild --css tailwind

これでプロジェクトが作成されればOK

Procfile.devを修正

esbuildを使う場合は rails s の代わりに./bin/devを使うように変更されており、
./bin/devを実行すると、Procfile.devに記述されているコマンドが実行されます。

Procfile.devを以下のように修正
docker上で ./bin/dev した場合にrailsサーバにアクセスできるように Procfile.devに -b 0.0.0.0 を追加

web: bin/rails server -b 0.0.0.0 -p 3000 
js: yarn build --watch
css: yarn build:css --watch

mysqlを入れる

バージョンは8.0.27になっているが入れたいバージョンを入れる

docker-compose.ymlを以下に修正
※mysqlのDB情報はプロジェクト毎に修正してください

version: '3'
services:
  app:
    restart: always
    build:
      context: .
    volumes:
      - .:/app
    command: sh -c "rm -f tmp/pids/server.pid && ./bin/dev"
    stdin_open: true
    tty: true
    ports:
      - 3000:3000
    depends_on:
      - db
  db:
    restart: always
    image: mysql:8.0.27
    platform: linux/amd64
    environment:
      MYSQL_DATABASE: rails_seven_sample_db
      MYSQL_USER: rails_seven_user
      MYSQL_ROOT_PASSWORD: seven_pass
      MYSQL_PASSWORD: seven_pass
      TZ: 'Asia/Tokyo'
      MYSQL_ROOT_HOST: "%"
    tty: true
    command: mysqld --character-set-server=utf8mb4 --explicit_defaults_for_timestamp=true --default-authentication-plugin=mysql_native_password    
    ports:
      - 3306:3306

commandにrm -f tmp/pids/server.pidを追加しないとdocker compose upで2回目以降に上手く起動しないので注意。

pry-railsを使う設定

今回は開発時のデバッグツールとして、pry-railsを使う想定にしているのでapp:に以下記述も必要

stdin_open: true
tty: true

Dockerfileを修正

イメージが作成されるときにbundleを最新の状態にするため
Dockerfileにbundle installを追加しておく

FROM ruby:3.0

ENV APP /app
RUN mkdir -p $APP && \
    apt-get update -y && \
    apt-get install default-mysql-client nodejs npm -y && \
    npm uninstall yarn -g && \
    npm install yarn -g -y
COPY . $APP/

WORKDIR $APP

RUN bundle install

config/database.ymlでDB設定

docker-compose.ymlの dbのところに書いた設定を記述

hostにはdocker-compose.ymlのサービス名はdbに修正。

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: rails_seven_user
  password: seven_pass
  host: db

development:
  <<: *default
  database: rails_seven_sample_db  

イメージ再作成

いままでのイメージは削除して再ビルド

docker-compose build

サーバ起動

docker-compose up

サーバが起動したら完了

esbuildの設定

特に設定不要。application.jsにjsファイルをimportして使えばOK

tailwindの設定

特に設定不要。viewにtailwindクラスを設定してあげればOK

4
1
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
4
1