Posted at

DBを使わないRails on DockerのWebアプリの作り方


Problem

とりあえずブレスト」というWebアプリを作ったときに「DBなしでできそう!」となったのだが、docker docsだとpostgreSQLありきたっだのでDBなしで開発を始める手順をまとめておきました。


Simple Conclusion


  • Dockerfileやdocker-compose.ymlからDBに関係しそうなところを削除する

  • rails newする際に"-O"オプションをつける


Details

まずはdocker docsを参考にDBを使わないDockerfileやdocker-compose.ymlの準備する。

最初にmkdir myappでアプリのディレクトリを作成し、cd myappでアプリのディレクトリへ移動しておく。


Dockerfile


myapp/Dockerfile

FROM ruby:2.5

ENV LANG C.UTF-8
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install -j4
COPY . /myapp

ポイントはapt-getの対象からpostgresql-clientをのぞくこと。


docker-compose.yml


myapp/docker-compose.yml

version: '3'

services:
web:
container_name: myapp_web
build:
context: .
dockerfile: Dockerfile
environment:
TZ: Asia/Tokyo
command: rails s
volumes:
- .:/myapp
ports:
- "3000:3000"

こちらはdb serviceをごっそり削除。depends_onするdbを消去するのでweb側のdepends_onも削除。

container_name、dockerfile、TZなどの設定は好みなのでつけなくてもOKです。


Rails new

上で作った"Dockerfile"、"docker-compose.yml"以外はdocker docsにそって"Gemfile"と"Gemfile.lock"を作っておく。

4つのファイルを作ったらrails newをしてWebアプリを作成してdocker imageをbuildしますが、ここのrails newでDatabaseを利用しないことを宣言するために"-O"オプションをつける。

色々設定とかしないといけないんだろうなーと思っていたけど"-O"だけで済むなんてさすがRailsさん。

$ docker-compose run web rails new . -O

$ docker-compose build

このあと、docker docsではDatabaseのあれやこれやの設定をしていますが、無視してdocker containerを立ち上げる。

$ docker-compose up

http://localhost:3000へアクセス!

Yay! You're on Rails (without Database) !!


Reference