Dockerで作成したRailsアプリをHerokuにデプロイ

## はじめに
- Dockerで作成したRailsアプリをアップロードするための忘備録です。
- Railsアプリの作成方法は、以下の記事で紹介しています。

> 【Imagemagick対応】Dockerを利用して、Rails環境を作成
> https://qiita.com/NA_simple/items/5e7f95ae58eec5d20e1f

- Heroku側の状態
    - ユーザー登録およびログインが完了した状態からスタートします
    - Heroku CLI を使います。
    - Downloadページはこちら
    - https://devcenter.heroku.com/articles/heroku-cli#download-and-install


## Herokuアプリの作成
- Dockerコンテナを動かすためのアプリを作成します
- Herokuのトップページにアクセスしてログイン
    - https://dashboard.heroku.com/

- [ New ]ボタン→ [ Create new app ]を選択
<img width="800" alt="スクリーンショット 2019-05-08 23.31.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349189/36b32f2f-5204-6901-95dc-96ecd1aaedec.png">

- App nameを決めます
    - この記事では例として、`abcdefgapp`とします
<img width="800" alt="スクリーンショット 2019-05-08 23.37.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349189/75582296-8442-bb28-77fe-02c1d6f02299.png">

- これでアプリの新規作成ができました

## DBの追加
- DBはHerokuのadd-onを使用します
- 先ほど作成したアプリ `abcdefgapp`のページに行きます
    - Installed add-ons には何もない状態です
    - `Configure Add-ons`をクリック
<img width="800" alt="img01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349189/d104f95d-89c7-1b92-90af-0c3dc911a2a1.png">


- 検索窓に `heroku postgres`と打って、選択します
<img width="800" alt="スクリーンショット 2019-05-09 15.14.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349189/620e239c-c114-5014-2bf3-dd40ed5700f3.png">


    - ※Plan name では有料・無料オプションを選択できます
    - 今回は課金しないので、Hobby Devです
<img width="461" alt="スクリーンショット 2019-05-09 15.15.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349189/17ec40e0-1ba7-5625-b1de-280dc95ed7cb.png">
    - Provision をクリック
- アプリのトップページに Postgresコンテナが生成されていればOK
- 次の手順で必要になるので、赤枠で囲ったコンテナ名を覚えてください
    - このアプリでは、`例) postgresql-fluffy-97609`でした
<img width="800" alt="img02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349189/8643c71e-5e69-a99b-e26b-f5e37169d6ab.png">


- DBコンテナの準備は完了です。

## コンテナをHerokuにプッシュ
- プッシュするRailsコンテナは、<a href="https://qiita.com/NA_simple/items/5e7f95ae58eec5d20e1f">こちらの記事</a> で生成しています
- プッシュする前に、<font color="Red">必ずコンテナを停止してくださ
い</font>
    - （docker-compose stop や down 等）
- heroku CLIを使用します
- RailsのDockerファイルを置いているディレクトリに移動します

### herokuにlogin
- 次の2つのコマンドを入力

```
$ heroku login
$ heroku container:login
```

### 作成したHeroku app上にコンテナをpush

```
$ heroku container:push web -a [アプリ名]
$ heroku container:release web -a [アプリ名]
```
- ※ ここでの [アプリ名]とは、__herokuアプリの作成__ で作成したアプリ名のことです
    - 本記事では、`abcdefgapp`という名前で作成しました

### コンテナとpostgreSQLを結びつける
```
$ heroku addons:attach [postgresコンテナ名] -a [アプリ名]
```
- ※ postgresコンテナ名とは、DBの追加の際に記録しておいたコンテナ名です
    - 本記事では`例) postgresql-fluffy-97609`でした
    - 分らない方は、記事上部の __DBの追加__ 欄をご確認ください    

### マイグレーションの実行
```
$ heroku run rake db:migrate -a [アプリ名]
```

### アプリのオープン
```
$ heroku open -a [アプリ名]
```

### ここまでのコマンドまとめ
```
$ heroku login
$ heroku container:login
$ heroku container:push web -a abcdefgapp
$ heroku container:release web -a abcdefgapp
$ heroku addons:attach postgresql-fluffy-97609 -a abcdefgapp
$ heroku run rake db:migrate -a abcdefgapp
$ heroku open -a abcdefgapp
```
- 自分のアプリ名に書き直して、メモ帳などに保存すると使いまわせます
- ※ `permission denied`等のエラーが出る際は、
    - heroku container:login 等を再度実行ください

## 動作確認
- herokuのアプリページ（ここでは abcdefgapp )を開く
- 右上の Open app をクリックするとプッシュしたページが開く
<img width="800" alt="スクリーンショット 2019-05-10 20.15.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349189/4989dd48-dd9a-591b-72b2-440d512852dd.png">

- Yey! you are on Rails!
- アドレスが`abcdefgapp.heroku.com`になっています

<img width="708" alt="スクリーンショット 2019-05-10 23.58.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349189/27e72bd6-2dd4-978e-e627-1b1551049d6f.png">

## 前の記事
> 【Imagemagick対応】Dockerを利用して、Rails環境を作成
> https://qiita.com/NA_simple/items/5e7f95ae58eec5d20e1f