本シリーズ集
タイトル | |
---|---|
0 | 目標・やりたいこと |
1 | AWS編 |
2 | rails開発環境構築編 |
3 | Nginx・MySQL編 |
4 | Capistrano編 |
5 | CircleCI編 |
6 | 総集編 |
rails 開発用のディレクトリ構成
私は、__rails__開発に、docker-compose を使用して環境を構築している。
今後、Nginx等 を語る上で、このディレクトリ構成の説明(というかpublicディレクトリの説明)が必要になるので、簡単に説明しておく。
/samplea
├ docker-compose.yml
├ Dockerfile
├ Gemfile
├ Gemfile.lock (空ファイル)
└ 【WEBサーバアクセス用の鍵】
まずは、Dockerfile
FROM ruby:2.7.1
RUN apt-get update && apt-get install -y \
build-essential \
nodejs
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 && \
apt-get update && apt-get install -y --no-install-recommends yarn
COPY 【WEBサーバアクセス用の鍵】 /root/.ssh/
WORKDIR /sample
COPY Gemfile /sample/Gemfile
COPY Gemfile.lock /sample/Gemfile.lock
RUN bundle install
COPY . /sample
RUN curl ...
の部分は、yarnのバージョン周りで、どうしてもうまく行かなかったので、この記述にしてある。詳細は後日別記事にてあげる予定。
この COPY 【WEBサーバアクセス用の鍵】 ...
の部分は本シリーズのCapistrano編にて使用するので、ここで記述。なぜこの記述が必要かといった詳細はそちらで説明する。
docker-compose.yml
ファイル
version: '3'
services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/sample
ports:
- 3000:3000
tty: true
stdin_open: true
db:
image: mysql:5.7
volumes:
- db-volume:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
db-volume:
Gemfile
ファイル
source 'https://rubygems.org'
ruby '2.7.1'
gem 'rails', '~> 6.0.3', '>= 6.0.3.4'
#プロジェクト生成
下記コマンドを打ち、プロジェクトを生成する。
$ docker-compose run web bash
...something was logged
root@aeac81b1e20b:/sample# rails new . --force --database=mysql
...
...
Webpacker successfully installed 🎉 🍰
これで、ローカルフォルダに、rails開発用のファイル群が生成される。
config/database.yml の変更
production:
<<: *default
database: app_production
username: root
password: password
# passwordは、docker-compose.ymlの environment: MYSQL_ROOT_PASSWORD に設定した値に合わせる必要がある。
host: db
# hostは、docker-compose.ymlのservices: db: の『db』の部分に合わせる必要がある。
これで、docker-compose up
コマンドにより一度でローカルサーバが起動でき、開発環境を構築することができる。
(蛇足)pumaとは?
Rubyのgemの一つで、所謂APサーバ。
WebサーバとAPサーバの違いは、以下サイトが参考になる。
・アプリケーションサーバとは?Webサーバとの違いを解説
・なぜrailsの本番環境ではUnicorn,Nginxを使うのか?
ところで、RubyのgemでAPサーバとなれるのは、__puma__と__unicorn__があるが、下記サイトにて違いがわかる。
・railsアプリケーションにおいて、なぜNginx+unicornなのか?
上記事の説明では
__unicorn__は、マルチプロセスで動作し、__puma__はマルチスレッドで動作する。
であるらしく、筆者にはメリットがイマイチ分からないが(おいおい調べていきたいと思っている)、rails5以降では、デフォルトで__puma__になっているため、APサーバの変更に工数を割く必要は無いと判断したため、__puma__を選定した。
まとめ
まとめというか、一言だけ。
なんでこの記事を作成したかというと、__Nginx編__にて、rails new
で生成されたpublic
フォルダを使用するためで、
なんか突拍子もなく、
〜〜
rails new
コマンドで生成されたpublic
フォルダを使用する〜〜
みたいなこと書いても読者が戸惑うかなっていう不安からこの記事を作成しました。
※ public
フォルダがなくても動作はします。ただ、APサーバと通信できないなどの障害が発生した際のエラー表示に役立ちます。