Docker Rails Sampleアプリ構築

適当なRailsアプリを作成するのに**脳死で作成**する

### 前提
* Ruby 2.6.5
* Railsバージョン6.0.1
* MySQL 5.7
* Node.js 8系
* webpacker用のコンテナは用意していない


```
$ mkdir rails-sample

$ rbenv local [使用するrubyバージョン]

$ git init

$ bundle init
gem 'rails'のコメントアウトを外す

$ bundle install --path vendor/bundle

$ bundle exec rails new . -B -d mysql --skip-test
-B bundle install をスキップする（お好み）
-d 利用するDBを指定（デフォルトはSQLite）
--skip-test railsのデフォルトのminitestというテストを利用しない場合は指定（お好み）

Gemfileの上書きしていいかどうかは Y でEnter

$ bundle exec rails webpacker:install

.gitignore に vendor/bundleを追記（お好み）
```

### docker-compose.ymlとDockerfile作成

Dockerfile

```Dockerfile
FROM ruby:[使用するrubyバージョン]
ENV LANG C.UTF-8
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

# nodejsとyarnはwebpackをインストールする際に必要
# Node.js
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && \
apt-get install nodejs
# yarnパッケージ管理ツール
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
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 yarn

WORKDIR /tmp
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install
ENV APP_HOME /rails-sample
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
COPY . /rails-sample
```

```docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - ./tmp/docker/mysql:/var/lib/mysql:delegated

  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/chiko
    ports:
      - "3000:3000"
    depends_on:
      - db
```

### database.ymlを編集（お好み）
```database.yml
default: &default
  adapter: mysql2
  timeout: 5000
  encoding: utf8mb4
  charset: utf8mb4
  collation: utf8mb4_general_ci
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: db
  port: 3306

development:
  <<: *default
  database: rails-sample_development

test:
  <<: *default
  database: rails-sample_test

production:
  <<: *default
  database: <%= ENV["DATABASE_NAME"] %>
  username: <%= ENV["DATABASE_USERNAME"] %>
  password: <%= ENV["DATABASE_PASSWORD"] %>
  host: <%= ENV["DATABASE_HOST"] %>
  port: <%= ENV["DATABASE_PORT"] %>
```
defaultに
- charset: utf8mb4
- collation: utf8mb4_general_ci
- port: 3306

を追記

productionは
- database: <%= ENV["DATABASE_NAME"] %>
- username: <%= ENV["DATABASE_USERNAME"] %>
- password: <%= ENV["DATABASE_PASSWORD"] %>
- host: <%= ENV["DATABASE_HOST"] %>
- port: <%= ENV["DATABASE_PORT"] %>

を全部環境変数に変更



```
$ docker-compose build

$ docker-compose run --rm web rails db:create
```

ScaffoldでUserモデル作成

```
$ docker-compose run --rm web rails g scaffold user name:string age:integer
```

トップページを用意

```
$ bundle exec rails g controller home index
```

```routes.rb
Rails.application.routes.draw do
  root 'home#index' # これを追記

  resources :users
end
```

Userページへのリンクを付与

```index.html.erb
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>

<%= link_to "user", users_path %>   <%# これを追記
```

マイグレーションして、コンテナを立ち上げる

```
$ docker-compose run --rm web rails db:migrate

$ docker-compose up -d

```

＝＞ http://localhost:3000 にアクセスして確認