0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails7系のAPIとPostgresqlをdockerで環境する方法

Last updated at Posted at 2024-02-19

最近、Dockerを使ってrailsの環境構築にチャレンジしたので、まとめておきたいと思います。

はじめに新規作成したフォルダの下に4つのファイルを作ってください(ファイル名は全く一緒でお願いします!)

  1. Dockerfile
  2. docker-compose
  3. Gemfile
  4. Gemfile.lock
    それぞれのファイルの記述を順を追って紹介します。

Dockerfile

FROM ruby:3.1.2
RUN apt-get update -qq && apt-get install -y vim

RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock

RUN gem update --system
RUN bundle update --bundler

RUN bundle install
COPY . /myapp

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]

docker-compose.yml

docker-compose.yml
version: '3'
services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"
    volumes:
      - postgresql-data:/var/lib/postgresql/data
  web:
    build:
      context: ./rails
    command: bash -c "tail -f log/development.log"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
    tty: true
    stdin_open: true
volumes:
  postgresql-data:

ちなみの公式ドキュメントにあるコードに加えて、以下も記述している。

environment:
  - POSTGRES_PASSWORD=password

ポスグレのpasswordを設定しないとこの後、docker-compose run web rake db:createでデータベースを作成する際にエラーが起きます。

また、dbの方にもportを指定しています。こうすることによって、TablePlusを使えるようにします。

rails/Gemfile

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

railsのバージョンを指定しない場合、最新版がダンロードされます。

rails/Gemfile.locl

こちらは空のままにしておきます

rails/Gemfile.lock

rails/entrypoint.sh

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

rm -f /myapp/tmp/pids/server.pid

exec "$@"

準備完了!コマンドを実行

docker compose run --rm rails rails new . --force --api --database=postgresql --skip-action-cable --skip-sprockets --skip-turbolinks --skip-webpack-install --skip-test --skip-bundle

データベースをPostgreSQLに指定して、アプリケーションを作成します。
また、webpackなど不要なものをスキップしておきます

docker compose run --rm rails bundle install

これでbundle installできます。

database.ymlを編集

database.ymlにhost,username,passwordを追加します

default: &default
  adapter: postgresql
  encoding: unicode
  host: backend
  username: postgres
  password: password
  pooling  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

DBを作成

docker compose run web rails db:create

これで環境構築完了です。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?