Rails6のリリースがされていたので、自身のPCに環境を作ってみた。
(環境)
Mac(Mojave 10.14.6)
(参考)
https://docs.docker.com/compose/rails/#define-the-project
に沿って実施。
実施の時は5系の記載だったので、6に置き換えて行う。
1.Docker for Macのインストール
(インストール済みならスキップ)
https://docs.docker.com/compose/install/
2.Rails / PostgreSQLアプリケーションを設定
Docker Composeを使用してRails / PostgreSQLアプリケーションを設定する。
2-1.プロジェクト定義
開発していくディレクトリにアプリケーションを構築するために必要な4つのファイルを設定する。
・Dockerfile
・Gemfile
・Gemfile.lock
・entrypoint.sh
・docker-compose.yml
*今回はPC内のUserフォルダ配下に作成
*プロジェクト名をmyappとして設定
$ mkdir myapp
$ cd myapp
FROM ruby:2.6.6
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client yarn
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
- Rails6でwebpackerが搭載され、yarnのインストールが必要になったので追記
(参考)https://yarnpkg.com/en/docs/install#debian-stable
source 'https://rubygems.org'
gem 'rails', '6.0.3'
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
version: '3'
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=password
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
2-2.プロジェクトの構築
作成した5つのファイルを利用してdocker-compose runを実行し、アプリケーションを生成する。(ターミナルを使って実施)
$ docker-compose run web rails new . --force --no-deps --database=postgresql
:
:
:
最後にWebpackerのインストール成功メッセージが表示される
Webpacker successfully installed 🎉 🍰
アプリケーション生成後は、以下を実施する。
$ docker-compose build
:
:
:
最後に下記のようなSuccess情報が表示される
Successfully built aa99bbad99f9
Successfully tagged myapp_web:latest
2-3.データベースの設定と作成
データベースの情報を設定するために、config/database.ymlを変更し、コマンドでDBを作成する。
# 設定箇所のみ抜粋
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: password # docker-compose.ymlのPOSTGRES_PASSWORDで指定した値
pool: 5
:
:
development:
<<: *default
database: myapp_development
:
:
test:
<<: *default
database: myapp_test
データベースを作成する
$ docker-compose run web rake db:create
# 作成が成功すると、以下のコマンドが表示される。
Starting myapp_db_1 ... done
Created database 'myapp_development'
Created database 'myapp_test'
2-4.dockerを起動
dockerを起動し、ローカル環境のページにアクセスする。
docker-compose up
実行すると以下のコマンドが表示される。
myapp_db_1 is up-to-date
Starting myapp_web_1 ... done
Attaching to myapp_db_1, myapp_web_1
:
:
web_1 | => Booting Puma
web_1 | => Rails 6.0.3.2 application starting in development
web_1 | => Run `rails server --help` for more startup options
web_1 | Puma starting in single mode...
web_1 | * Version 4.3.5 (ruby 2.6.6-p146), codename: Mysterious Traveller
web_1 | * Min threads: 5, max threads: 5
web_1 | * Environment: development
web_1 | * Listening on tcp://0.0.0.0:3000
web_1 | Use Ctrl-C to stop
**http://localhost:3000**にアクセスして、ようこそページが表示されれば、構築完了。
その他(アプリケーションの停止)
アプリケーションの停止はプロジェクトディレクトリでdocker-compose downを実行する。
・別のターミナルウィンドウを表示し、プロジェクトディレクトリから実施
$ docker-compose down
Stopping myapp_web_1 ... done
Stopping myapp_db_1 ... done
Removing myapp_web_run_b13a7c5899a1 ... done
Removing myapp_web_1 ... done
Removing myapp_web_run_5ad07400cf63 ... done
Removing myapp_db_1 ... done
Removing network myapp_default
・downするともう一つのターミナル(docker-compose upした側)も停止の実行結果が表示される
web_1 | - Gracefully stopping, waiting for requests to finish
web_1 | === puma shutdown: 2019-08-25 23:58:46 +0000 ===
web_1 | - Goodbye!
web_1 | Exiting
myapp_web_1 exited with code 1
db_1 | 2019-08-25 23:58:47.254 UTC [1] LOG: received smart shutdown request
db_1 | 2019-08-25 23:58:47.278 UTC [1] LOG: background worker "logical replication launcher" (PID 28) exited with exit code 1
db_1 | 2019-08-25 23:58:47.279 UTC [23] LOG: shutting down
db_1 | 2019-08-25 23:58:47.353 UTC [1] LOG: database system is shut down
myapp_db_1 exited with code 0
履歴
20200622
再度構築してみたら、以下のエラーとなったので構築方法を修正、反映した。
PG::ConnectionBad: could not translate host name "db" to address: Name or service not known
- postgresコンテナに環境変数POSTGRES_PASSWORDを設定
- 設定した値をconfig/database.ymlのpasswordに定義
参考にした記事
https://qiita.com/at-946/items/2fb75cec5355fad4050d
20200623
バージョンを指定するように修正
ruby:2.6.6
gem 'rails', '6.0.3'