Rails 新規作成から docker-compose up まで
まえおき
ありがたいことにRails new
をする機会が年に数回ある。その時は、毎回調べながらやっているのだが、そろそろ面倒なのでメモを取ってみる。今回メモしておくのはRails new
から docker-compose up
を行い、おなじみの「Yay! You’re on Rails!」を表示させるまでの環境構築手順。可能な限り更新していきたいとは思ってます。
環境
- Rails: 6.1.2
- Ruby: 3.0.0
- Docker for mac: 3.1.0
事前準備
- 作業フォルダ
- bundler, docker, rbenv など
手順
- Gemfile 作成
- Gemfile.lock 作成
- Dockerfile 作成
- docker-compose.yml 作成
dcoker-compose exec web rails new
docker-compose build
- database.ymlの書き換え
docker-compose run --rm web bin/rails db:create
docker-compose up
Tips
- Gemfile, Gemfile.lock, Dockerfile, docker-cmpose.yml の作成順序はなんでもいい。
1. Gemfile 作成
以下の内容でGemfileを作成する。 railsのバージョンはその時々に合わせれば良い。
source 'https://rubygems.org'
gem 'rails', '~> 6.1.2'
2. Gemfile.lock作成
touch Gemfile.lock
Tips
Dockerfile
のビルドで必要なだけなので、中身は空でいい。この作成も含めてビルドしてくれないのかなとも思うけど、Dockerのドキュメントにも同じような手順が記載されているので、きっとこれが正解なのだろう。
3. Dockerfile 作成
FROM ruby:3.0.0
ENV APP=/app
RUN mkdir -p ${APP}
WORKDIR ${APP}
COPY Gemfile Gemfile.lock ${APP}/
ENV LANK=C.UTF-8
RUN echo 'Asia/Tokyo' > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata
ENV DEPENDENCY="nodejs libpq-dev libsqlite3-dev libssl-dev libgeos-dev curl less sudo" \
DEV_DEPENDENCY="build-essential" \
YARN_VERSION=1.22.4
RUN set -x && \
curl -sL https://deb.nodesource.com/setup_15.x | bash - && \
apt-get update && \
apt-get install -yq --no-install-recommends ${DEPENDENCY} ${DEV_DEPENDENCY} && \
bash -c "curl -sL --compressed https://yarnpkg.com/downloads/${YARN_VERSION}/yarn-v${YARN_VERSION}.tar.gz | tee >(tar zx -C /usr/local/ --strip=1 --wildcards yarn*/bin --no-same-owner --no-same-permissions) | tar zx -C /usr/local/ --strip=1 --wildcards yarn*/lib --no-same-owner --no-same-permissions" && \
bundle install -j4 && \
apt-get purge -y ${DEV_DEPENDENCY} && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
truncate -s 0 /var/log/*log
COPY . ${APP}
CMD ["bin/rails", "s", "-b", "0.0.0.0"]
Tips
-
rm -rf /var/lib~
あたりは必要ないファイルとかディレクトリを削除してイメージサイズを軽くしている。 -
curl
,less
,sudo
は必須じゃないのでなくても大丈夫。
4. docker-compose.yml 作成
version: '3'
services:
web:
build: .
command: ["bin/rails", "s", "-b", "0.0.0.0"]
depends_on:
- db
ports:
- "3000:3000"
volumes:
- .:/app:cached
- /app/vendor
- /app/tmp
- /app/log
- /app/.git
db:
image: postgres:13
environment:
POSTGRES_USER: "${DATABASE_USER:-foo}"
POSTGRES_PASSWORD: "${DATABASE_PASS:-bar}"
volumes:
- db:/var/lib/postgresql/data:cached
ports:
- "5432:5432"
volumes:
db:
Tips
-
Dockerのドキュメントに書いてあるように
このファイルの拡張子は .yml と .yaml のどちらでも構いません。
-
postgres
のバージョンはここで確認できる
5. docker-compose exec web rails new
タイトル通りのコマンドでもいいけど、実際には以下のようなコマンドを用いると幸せになれるかも
docker-compose run --rm web rails new . --api --force --database=postgresql --skip-turbolinks --skip-test --skip-webpack-install
その他いらないものは場面に合わせて skip して良さそう: https://railsdoc.com/page/rails_new
Tips
rails newの詳しいオプションはこちら。以下使用オプションの説明。
--api
: Railsのapiモードで作成。必要ない場合は外す。
--force
: ファイルが存在する場合に上書きする。
--database
: 使用するDBの設定。ここではpsqlを使用してるが、mysqlの場合は--database= mysql
とすればいい。
--skip-turbolinks
: turbolinksをオフにする。turbolinksはページ遷移を高速にしてくれるやつっぽいが、今回のようにapiモードでは必要ないはずなので入れないようにする。(もしかしたらapiモードの時点で入らないのかもしれないけど、確かめたことはない)
--skip-test
: Railsのデフォルトはminitestなので、Rspecを使いたい時はこれをつける。(オプションで指定できるようにしてくれないかな。。。)
6. database.ymlの書き換え
ここまでくればdocker-compose upで起動はできるが、localhost:3000でアクセスするとDBに接続出来ないよとエラーが出る。(自分の場合だけ?)
なので、最低限エラーが出ないレベルで config/database.yml を以下のように書き換える。(一部のみ表示)
default: &default
adapter: postgresql
encoding: unicode
# 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: <%= ENV.fetch('DATABASE_HOST') { 'db' } %>
port: <%= ENV.fetch('DATABASE_PORT') { 5432 } %>
username: <%= ENV.fetch('DATABASE_USER') { 'foo' } %>
password: <%= ENV.fetch('DATABASE_PASS') { 'bar' } %>
development:
<<: *default
database: <%= ENV.fetch("DATABASE_NAME") { 'db' } %>
7. イメージ作成
docker-compose build
8. DB作成
docker-compose run --rm web bin/rails db:create
### Tips
-
PG::ConnectionBad: FATAL: password authentication failed for user "xxxx"
が 発生したらボリュームを消すと良い
9. docker-compose up
docker-compose build
で起動。その後http://localhost:3000/
にアクセスすれば、おなじみの「Yay! You’re on Rails!」が表示されるはず。
まとめ
dockerよくわからん。
参考文献
Discussion