Ruby
Rails
PostgreSQL
環境構築
docker

[備忘]公式quick startそのまんまレポート mac+docker+rails+postgres

引用:https://docs.docker.com/compose/rails/#define-the-project

dockerでrails+postgresの環境を作る。

はじめに

docker for macをインストール
https://docs.docker.com/compose/install/
https://docs.docker.com/docker-for-mac/install/

それから、以下4ファイルを用意する必要がある。

  • Dockerfile
  • Gemfile
  • Gemfile.lock
  • docker-compose.yml

*今回は、workspace/プロジェクト名/project/以下に4つのファイルをおいた。

Dockerfileを作る

FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

Gemfileを作る

このファイルはrailsをロードするためだけのGemfileです。
rails newのタイミングで上書きされます。

source 'https://rubygems.org'
gem 'rails', '5.0.0.1'

空のGemfile.lockを作る

まっさらなやつを用意しましょう。

docker-compose.ymlを作る

docker-compose.yml
version: '3'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

この4つのファイルを使ってrails new!

以下のコマンドでrails newしましょう。

$ docker-compose run web rails new . --force --database=postgresql

以下のようなエラーが出た時は・・・

ERROR: Couldn't connect to Docker daemon. You might need to start Docker for Mac.

これはdockerを起動していないだけ。
dockerを起動してrunningしていることを確認してからコマンドを打ちましょう:hugging:

すると、ずらずらーと環境構築してくれます。

新しいGemfileができているので、イメージを再構築

docker-compose build

そしたらずらずらgemをインストールしてくれる。

config/database.ymlをいじる。

db接続の対象を変えます。
この状態でアプリは起動可能だが、db接続がlocalhostに向いている。なので用意するpostgresのdbに向くようにする。

config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password:
  pool: 5

development:
  <<: *default
  database: myapp_development


test:
  <<: *default
  database: myapp_test

起動できることを確認して、db:createする。

起動できることを確認しましょう

docker-compose up

そしてdocker-compose upしたterminalとは別のterminalを開き、db作成

docker-compose run web rake db:create

期待に胸膨らませ「http://localhost:3000」

やったー:hugging:
彼らを見るとなぜか幸せな気分になる。

彼らを休ませてあげよう

docker-compose upしたタブでcontrol+cで、お休みします。

再起動。

docker-compose up

この時以下のようなエラーが出るときがあるので、

web_1 | A server is already
running. Check /myapp/tmp/pids/server.pid.

そのときは、tmp/pids/server.pidファイルを削除して、改めて、docker-compose upすればok。

rails cとかしたいとき、

以下のコマンドでssh接続

docker exec -it project_web_1 bash

project_web_1はコンテナ名が入ります。

binding.pryとかしたいとき

pry系のgemを入れるだけでは、pryを使えません。
pry系のgemを入れてから、以下の記事を参照。

http://source.hatenadiary.jp/entry/2017/01/27/121635

quick startにあった以下二つは省略

・Restart the application

作業再開のときとか、dbを作り直したいときとかに参照。

・Rebuild the application

docker-compose.ymlを変更したときにrebuildが必要になる時がある。