本シリーズ集

タイトル
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

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ファイル

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ファイル

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 の変更

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サーバとなれるのは、pumaunicornがあるが、下記サイトにて違いがわかる。

railsアプリケーションにおいて、なぜNginx+unicornなのか?

上記事の説明では

unicornは、マルチプロセスで動作し、pumaはマルチスレッドで動作する。

 であるらしく、筆者にはメリットがイマイチ分からないが(おいおい調べていきたいと思っている)、rails5以降では、デフォルトでpumaになっているため、APサーバの変更に工数を割く必要は無いと判断したため、pumaを選定した。

まとめ

 まとめというか、一言だけ。
なんでこの記事を作成したかというと、Nginx編にて、rails newで生成されたpublicフォルダを使用するためで、
なんか突拍子もなく、

〜〜rails new コマンドで生成されたpublicフォルダを使用する〜〜

 みたいなこと書いても読者が戸惑うかなっていう不安からこの記事を作成しました。

 ※ publicフォルダがなくても動作はします。ただ、APサーバと通信できないなどの障害が発生した際のエラー表示に役立ちます。