4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DockerでRails6環境を作る

Last updated at Posted at 2021-08-20

Docker で Rails6 の環境を作ったときのメモ。
商用で使うわけではなく、development 環境でしか使わないので、いろいろ足りないかもしれない。
なお環境は WSL2 で、事前に ruby2.7.2 と docker と docker-compose をインストールしてある。

Dockerの公式ページにある entrypoint.sh は使わない。
あと、個人的な好みで Docker Compose を使う。

ファイルの準備

準備するのは以下の4つのファイル

Dockerfile

apt-key はもうすぐ使えなくなるだろうが、今は気にしない。
nodejs のデフォルトのバージョンが 10.x なのだが、これだとこの後の Webpack のコンパイルで失敗する模様。
よって追加で 14.x をインストールする。

Dockerfile
FROM ruby:2.7.2

RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -\
    && echo 'deb http://dl.yarnpkg.com/debian/ stable main' > /etc/apt/sources.list.d/yarn.list

RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN apt update -qq && apt install -y nodejs build-essential postgresql-client yarn \
    curl dirmngr apt-transport-https lsb-release ca-certificates

ENV APP_ROOT /app
RUN mkdir ${APP_ROOT}
WORKDIR ${APP_ROOT}
ADD ./Gemfile ${APP_ROOT}/Gemfile
ADD ./Gemfile.lock ${APP_ROOT}/Gemfile.lock

RUN bundle install

ADD . ${APP_ROOT}

Gemfile

Gemfile
source 'https://rubygems.org'
gem 'rails'

Gemfile.lock

空ファイルを作る。

Gemfile.lock

docker-compose.yml

docker-compose.yml
version: '3'
services:
  db:
    image: postgres:13.4
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_USER=postgres
  web:
    build: .
    environment:
      RAILS_ENV: development
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/app
    ports:
      - '3000:3000'
    depends_on:
      - db

Railsアプリ作成

$ docker-compose build
$ docker-compose run --rm --no-deps web rails new . --force --database=postgresql

権限書き換え

私の場合、Dockerグループの設定などをしていないので、 rails new でファイルを作ると全部 root 権限になってしまう。
そこで sudo chown -R でファイルの所有者を自分に書き換えている。

$ sudo chown -R me.me *

Railsの設定

config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db           # 追加(docker-compose.ymlのservicesに設定したのと同じ名前にする)
  username: postgres # 追加(docker-compose.ymlのPOSTGRES_USERに設定したのと同じ値にする)
  password: postgres # 追加(docker-compose.ymlのPOSTGRES_PASSWORDに設定したのと同じ値にする)
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

host, username, password の 3 行を追加する。username と password は docker-compose.yml で設定したものと合わせる。
いつ頃からか password を設定しないと怒られるようになった。

DB作成

$ docker-compose run --rm web rake db:create

起動

$ docker-compose up

DBマイグレーション

Scaffold

$ docker-compose run --rm web rails g scaffold User name:string height:integer weight:integer

ここでも出来るファイルは root 権限になってしまうので、sudo chown -R でファイルの所有者を自分に書き換える。

Migration

$ docker-compose run --rm web rake db:migrate

Permission denied のエラーが出たら

db_1   | 2021-08-22 10:35:11.953 UTC [31] WARNING:  could not open statistics file "pg_stat_tmp/global.stat": Permission denied

みたいな感じで Permission denied のエラーが出ることがある。
そのときは sudo chown -R me.me * で権限を自分に書き換える。
めんどうなのですべてのファイルの権限を書き換えている。

OCI runtime create failed のエラーが出たら

ERROR: for rails_db_1  Cannot start service db: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting "/run/desktop/mnt/host/wsl/docker-desktop-bind-mounts/Ubuntu-20.04/b90b8fe5c1b58941ad8f1d946593e332a8ad2a209d955b5b9babc4dea8a62ea9" to rootfs at "/var/lib/postgresql/data" caused: mount through procfd: no such file or directory: unknown

理由は分からないがこのエラーが出たら WSL を再起動すると直るようだ。

Webpacker::Manifest::MissingEntryError が出たら

error.png

Webpacker::Manifest::MissingEntryError in Users#index
みたいなエラーが出たときに以下をやったら直る。

$ docker-compose run --rm web rake webpacker:install
$ docker-compose run --rm web rake webpacker:compile

Rails7 の環境も作った

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?