はじめに
今回Railsでマッチングアプリを開発しようと思いまして、ローカル環境構築にdocer-composeを用いました。
DBはPostgreSQLを採用しています。
引くほど詰まりまくったので記録を残しておこうと思います。
環境
- macOS Catalina 10.15.4
- ruby 2.6.3
- rails 2.5.3
- docker for mac 2.2.0.4
- PostgreSQL 12.2
[1]作業ディレクトリを作成して移動
% mkdir app(好きな名前)
% cd app
% pwd
~/app
ここに作業コンテナを作成します。
[2]dockerを立ち上げるのに必要なファイルを作成
ここでは、docker-composeでスケルトンアプリを立ち上げるのに必要なファイルを作成していきます。
簡易パスワードで作ったので面倒くさがりな方は基本コピペで大丈夫です笑
Dockerfileの作成
Dockerfileにはdocker-composeでコンテナを立ち上げる際に必要な処理を記述します。
FROM ruby:2.6.3
ENV LANG C.UTF-8
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs
RUN mkdir /app
ENV APP_ROOT /app
WORKDIR $APP_ROOT
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
RUN bundle install
ADD . $APP_ROOT
docker-compose.ymlの作成
ここではwebとpostgresという2つのコンテナを立ち上げます。
postgresコンテナでDBを、webコンテナでrailsを立ち上げます。
version: '3'
services:
postgres:
image: postgres
ports:
- "5432:5432"
volumes:
- ./tmp/db:/var/lib/postgresql/data #MacOSの場合
environment:
POSTGRES_USER: 'admin'
POSTGRES_PASSWORD: 'admin-pass'
POSTGRES_HOST: 'postgres'
POSTGRES_PORT: 5432
restart: always
web:
build: .
image: rails
container_name: 'web'
command: bundle exec rails s -p 3000 -b '0.0.0.0'
ports:
- "3000:3000"
environment:
VIRTUAL_PORT: 3000
volumes:
- .:/app
depends_on:
- postgres
restart: always
Gemfileの作成
ここでbundle install
するためのRubyやRailsのバージョンを指定します。
% vi Gemfile
source 'https://rubygems.org'
ruby '2.6.3'
gem 'rails', '5.2.3'
ちなみにdocker開発では、でgemの変更を反映させるにはその都度docker-comopose build
を行う必要があります。
Gemfile.lockの作成
ここで空のGemfile.lock
を作成しておきます。
% touch Gemfile.lock
[3]rails newする
webコンテナでrailsを起動してスケルトンアプリを作成します。
docker-compose run web rails new . --force --database=postgresql --skip-bundle
database.ymlを修正する
railsに必要なファイルが自動で作成されているはずなので、ここでconfig
ディレクトリにあるdatabase.yml
を修正します。
...
default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: admin #追加
password: admin-pass #追加
host: postgres #追加
...
docker-compose build & upする
% docker-compose build
% docker-compose up -d # -d はバックグラウンド処理
db:createする
今後railsに関わる作業は基本的にdocker-compose run web
でコンテナ内のrailsを操作します。
% docker-compose run web db:create
docker-compose ps
でコンテナの状態を確認しましょう。
% docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------
matching_app_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp
web bundle exec rails s -p 300 ... Up 0.0.0.0:3000->3000/tcp
コンテナも無事立ち上がっていますね。
DBも作成したので、localhost:3000
にアクセスしてみましょう。
ここで"yay"の画面が返ってきたらローカル環境の立ち上げは成功です!!
PosticoでDBにアクセスする
Posticoという超絶便利なツールがありまして、GUIで直感的にDBを操作することができます。
Dockerで立ち上げたDBにアクセスするのが難しかったので、そちれについても記事を書きたいと思います!
Postico記事 -> https://qiita.com/Rick516/items/5dfb754005e8c3f3fd6d