Railsチュートリアル 第2章 - Toyアプリケーション - Herokuへのデプロイ

# 前提

[Railsチュートリアル 第2章 - Toyアプリケーション - Micropostsコントローラ](https://qiita.com/rapidliner00/items/857e6b46ba682cd9adfc)の続きです。本エントリにて第2章の内容は完了となります。

# ToyアプリケーションのHerokuへのデプロイ

（以下の手順を行っていない場合）まず、/toy_app以下のGitローカルリポジトリをHerokuにプッシュできる準備を整えます。

```:zsh
>>> pwd
~/docker/rails_tutorial_test/toy_app

>>> heroku create
>>> git remote add heroku {HerokuのリモートリポジトリのURL}
```

* Herokuインスタンスが作成済み
* /toy_app以下のGitローカルリポジトリにHerokuのリモートリポジトリを追加済み
* `toy_app/Gemfile`に本番環境で必要なgemが書かれている状態で`bundle install`が実行された

以上の条件が整っているならば、/toy_app以下のGitローカルリポジトリをHerokuにプッシュすることにより、Toyアプリケーションを本番環境にデプロイすることができます。実際にやってみましょう。

```:zsh
>>> git push heroku
Enumerating objects: 216, done.
...略
remote: Verifying deploy... done.
To https://git.heroku.com/{ユニークなプロダクト名}.git
 * [new branch]      master -> master
```

{ユニークなプロダクト名}の部分は、`heroku create`の時点でプロダクト名を指定していないならば、Heroku側で生成された名前がついているはずです。

本番環境でデータベースを動かすためはに、`heroku run`コマンドにより本番データベースのマイグレーションを行う必要があります。実際にやってみましょう。

```
>>> heroku run rails db:migrate
Running rails db:migrate on ⬢ {ユニークなプロダクト名}... up, run.5990 (Free)
D, [2019-08-05T11:04:53.018787 #4] DEBUG -- :    (347.9ms)  CREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY)
...略
D, [2019-08-05T11:04:54.013985 #4] DEBUG -- :    (0.9ms)  SELECT pg_advisory_unlock(略)
```

特にエラーらしきメッセージは出ていなかったので、本番データベースのマイグレーションも正常完了したようです。

# 演習

## 1. 本番環境で２〜３人のユーザーを作成してみましょう。

ユーザー作成の画面です。

<img width="838" alt="スクリーンショット 2019-08-06 7.57.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323778/8b2e0ed7-2690-5a2b-fab9-02f5e815bc53.png">

「Create User」ボタンをクリックしてみます。すると、数秒後に以下のような画面が出てきました。

<img width="838" alt="スクリーンショット 2019-08-06 7.58.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323778/23fd056b-fb22-341b-d688-e4d9c4aa2c97.png">

ユーザーを3人作成した時点での/usersのスクリーンショットを以下に示します。

<img width="838" alt="スクリーンショット 2019-08-06 8.01.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323778/67958631-6756-3b6b-f1c4-d37ba809ac6d.png">

### 「最初のユーザーのマイクロポストを表示する」というコードを削除しなかった場合

そういえば、「もし2.3.3.1の演習をやっていれば、「最初のユーザーのマイクロポストを表示する」というコードを削除する必要がある」とRailsチュートリアル本文に注意書きがありました。当該コードを削除せずにToyアプリケーションをデプロイしたらどうなるのでしょうか。答えは「ユーザーの作成が正常完了した次の画面を出力する過程でエラー画面が出力される」というものでした。

なお、ユーザーの作成そのものは正常にデータベースに反映されていました。

### 「Name」「Email」をブランクとしてユーザーを作成しようとした場合

[Railsチュートリアル 第2章 - Toyアプリケーション - Micropostsコントローラ内](https://qiita.com/rapidliner00/items/857e6b46ba682cd9adfc#3-%E3%83%AA%E3%82%B9%E3%83%88-217%E3%81%AEfill_in%E3%81%A8%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E7%AE%87%E6%89%80%E3%82%92%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%E3%81%A6user%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AEname%E3%81%A8email%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E6%A4%9C%E8%A8%BC%E3%81%97%E3%81%A6%E3%81%BF%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84-%E5%9B%B3-217)におきまして、「「Name」「Email」いずれか一方でもブランクとした場合、ユーザーの新規登録が抑止される」というバリデーションを作成しました。というわけで、「Name」「Email」をブランクとしてユーザーの作成を試みます。

<img width="838" alt="スクリーンショット 2019-08-06 8.03.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323778/8d670db8-1e8e-e002-f253-1d83e0911ded.png">

上記スクリーンショットの状態のまま「Create User」ボタンを押してみます。すると…

<img width="838" alt="スクリーンショット 2019-08-06 8.04.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323778/15787dd8-664f-698c-e39d-dfac6f5e8b52.png">

エラーメッセージが出力されました。

<img width="838" alt="スクリーンショット 2019-08-06 19.24.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323778/f7d082f7-e2d4-983b-4ec7-d86ff3103e8b.png">

ユーザーの追加処理も行われていません。

## 2. 本番環境で最初のユーザーのマイクロポストを作ってみましょう。

<img width="838" alt="スクリーンショット 2019-08-06 19.29.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323778/c72a2c1c-f58e-9e80-dff1-38fef4984bd3.png">

まずmicropost/newにアクセスします。表示された画面で「Content」に「First Micropost!」、「User」に「1」と入力し、「Create Micropost」ボタンをクリックします。

<img width="838" alt="スクリーンショット 2019-08-07 6.07.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323778/bd2178d7-bf83-423d-3faf-22a7b83660ac.png">

マイクロポストが正常に作れました。Content、Userともに、内容にも問題はありません。

<img width="838" alt="スクリーンショット 2019-08-07 6.23.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323778/c9178aed-4b3c-a023-7984-1ad6ce791f83.png">

/micropostsにも正常に反映されています。

## 3.マイクロポストのContentに141文字以上を入力した状態で、マイクロポストを作成してみましょう。リスト 2.13で加えたバリデーションが本番環境でもうまく動くかどうか、確認してみてください。

micropost/newにアクセスします。表示された画面で「Content」に「Ruby is an interpreted, high-level, general-purpose programming language. It was designed and developed in the mid-1990s by Yukihiro "Matz" Matsumoto in Japan.」、「User」に「1」と入力します。Contentの文字列は、[en:Ruby (programming language) - Wikipedia](https://en.wikipedia.org/wiki/Ruby_(programming_language))の1段落目の内容で、159文字になります。

<img width="838" alt="スクリーンショット 2019-08-07 6.36.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323778/eaec8a6f-7a0b-c364-b270-36d28245d316.png">

「Create Micropost」ボタンをクリックします。すると…

<img width="838" alt="スクリーンショット 2019-08-07 6.37.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323778/d458cfe2-aca2-d6ba-62e0-82a4cbe0c1dc.png">

「Content is too long (maximum is 140 characters)」というエラーメッセージが表示されました。

<img width="838" alt="スクリーンショット 2019-08-07 6.38.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323778/19e31641-2c90-3ec1-d9ca-da401b57f4a0.png">

/micropostsを確認しても、確かに当該マイクロポストはデータベースに反映されていません。