Herokuへのデプロイ手順｜Rails + MySQL

##はじめに
MySQLで作成したRailsアプリを、Herokuを使ってデプロイすることがあったので備忘録としてまとめました。同じ環境で初めてデプロイする方の参考になれば幸いです。

##自分の環境
- macOS 10.15.3
- DB: MySQL
- Rails 5.0.7
  
##Railsアプリケーションの作成
###・アプリ作成 [現在作成中]
###・Gemfile修正
`sqlite3`が入っている場合は、以下のようにしてproduction環境下で反映されないようにしましょう。

```ruby:Gemfile.rb
group :development, :test do
  gem 'sqlite3', '~> 1.4'
end
```
下記`mysql2`を追加。

```ruby:Gemfile.rb
  gem 'mysql2'
```
###・config/environments/production.rbの設定

Heroku上の本番環境でHTMLにCSSやJavaScriptが反映されるように、以下の記述を書き換えます。

```:ターミナル
# デフォルトのfalseをtrueにします。
config.assets.compile = true
```

##作成したRailsアプリをGit管理

Railsプロジェクトに移動します。(ディレクトリへのパスは自身の物へ置き換えてください)

```:ターミナル
$ cd rails/MyApp
```

以下を実行すると、RailsアプリがGit管理されます。

```:ターミナル
# リポジトリを新規作成。
$ git init

# 変更があったすべてのファイルがaddされる。
$ git add .

# ファイルの変更や追加などを保存。
$ git commit -m "<ここにコミットメッセージをいれる>"
```
##Herokuアカウントの登録
https://jp.heroku.com/ にて登録。
##Heroku CLIのインストール
Heroku CLIをインストールすると、ターミナル上でHerokuのコマンド操作ができるようになります。
https://devcenter.heroku.com/articles/heroku-cli
上記サイト、もしくは下記コマンドでインストールできます。
 
```:ターミナル
brew tap heroku/brew && brew install heroku
```
以下のコマンドで、インストールができているか確認します。

```:ターミナル
$heroku -v
>>heroku/7.0.47 darwin-x64 node-v10.1.0
```
##SSH公開鍵の作成、Herokuへ追加
###・SSH公開鍵の作成
まずは公開鍵が作成されているか確認しましょう。

```:ターミナル
cat ~/.ssh/id_rsa.pub
```
作成されてない場合は以下のように表示されます。

```:ターミナル
No such file or directory
```
それでは公開鍵を作成していきましょう。(実行ディレクトリはどこでも大丈夫です)

```:ターミナル
$ ssh-keygen
Generating public/private rsa key pair

# 鍵の保存先を聞かれます。変更する必要はないので、そのままEnterキーで進みます。
Enter file in which to save the key (/Users/ユーザー名/.ssh/id_rsa):

# 鍵のパスワードを設定するか聞かれます。
# 設定しない場合はそのままEnterを、設定する場合はパスワードを入力します。
Enter passphrase (empty for no passphrase):

# パスワードの確認をされます。同じパスワードを入力してください。
# 設定していない場合は空欄のままEnterキーで進みます。
Enter same passphrase again:
```

これで公開鍵が作成されました。確認しましょう。

```:ターミナル
cat ~/.ssh/id_rsa.pub

#このように文字列が表示されるはずです。
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== schacon@mylaptop.local
```
###・Herokuに公開鍵を追加
Herokuにログインします。

```:ターミナル
$ heroku login
```

以下のコマンドでSSH公開鍵がHerokuに追加されます。

```:ターミナル
$ heroku keys:add ~/.ssh/id_rsa.pub
```
追加されたか確認しておきましょう。

```:ターミナル
$ heroku keys
# SSHキーの一部が表示されます。
ssh-rsa AAAA...BBBB
```
##作成したRailsアプリとHerokuの紐付け
Railsプロジェクトに移動します。(ディレクトリへのパスは自身の物へ置き換えてください)

```:ターミナル
$ cd rails/MyApp
```

Herokuへ新しいアプリケーションを作成しましょう。

```:ターミナル
$ heroku apps:create <好きなアプリ名>
```

以下のように表示されたらアプリ名が既に使われちゃってます。
重複は許されないので他のアプリ名へ変更しましょう。

```:ターミナル
Name myapp is already taken
```

##HerokuにDBを追加
###・MySQLを追加
以下のコマンドで、__`clearDB`__というMysqlを使うためのアドオンが__`ignite`__プランで追加されます。

```:ターミナル
$ heroku addons:create cleardb:ignite
```

以下のような表示が出たら、クレジットカードの登録が必要です。

```:ターミナル
▸    Please verify your account to install this add-on plan (please enter a credit card) For more
▸    information, see https://devcenter.heroku.com/categories/billing Verify now at
▸    https://heroku.com/verify
```
*＊アドオンを追加するためにクレジットの登録が必要ですが、iginteプランは無料で使えます。*

詳しいプラン内容については以下を参照。
https://elements.heroku.com/addons/cleardb
###・Herokuアプリに環境変数を設定

以下のコマンドで、環境変数に入る値を取得します。

```:ターミナル
$ heroku config
=== <アプリの名前> Config Vars
CLEARDB_DATABASE_URL: mysql://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
```

Herokuアプリの環境変数に、上記で取得した値をそれぞれ設定。

```:ターミナル
$ heroku config:add DB_NAME='<データベース名>'

$ heroku config:add DB_USERNAME='<ユーザー名>'

$ heroku config:add DB_PASSWORD='<パスワード>'

$ heroku config:add DB_HOSTNAME='<ホスト名>'

$ heroku config:add DB_PORT='3306'

# gemで「mysql2」を使用しているので、mysql://ではなく「mysql2://」とします。
$ heroku config:add DATABASE_URL='mysql2://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true'
```

設定した値を確認しましょう。
以下のように表示されるはずです。

```
$ heroku config

=== <アプリの名前> Config Vars
CLEARDB_DATABASE_URL: mysql://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
DATABASE_URL:         mysql2://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
DB_HOSTNAME:          <ホスト名>
DB_NAME:              <データベース名>
DB_PASSWORD:          <パスワード>
DB_PORT:              3306
DB_USERNAME:          <ユーザー名>
```

##Herokuにデプロイ
以下コマンドでローカルリポジトリをHerokuへpushすると、自動でデプロイが進んでいきます。

```:ターミナル
$ git push heroku master
```
*＊master以外のブランチをpushする場合は以下を実行*

```:ターミナル
$ git push heroku <ブランチ名>:master
```

最後に以下のコマンドを入力して、データベースのマイグレーションをします。

```:ターミナル
$ heroku rake db:migrate
```

以下のコマンドを実行すると、ブラウザでアプリケーションにアクセスできます。

```:ターミナル
$ heroku open
```
お疲れ様でした！

##参考サイト・記事
[mysqlを使ったRailsアプリをHerokuにデプロイする流れ](https://qiita.com/shou1012/items/bf55a185920e717f4011)
[Deploying with Git](https://devcenter.heroku.com/articles/git)
[SSH 公開鍵の作成](https://git-scm.com/book/ja/v2/Git%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-SSH-%E5%85%AC%E9%96%8B%E9%8D%B5%E3%81%AE%E4%BD%9C%E6%88%90)