Ruby on Rails + MySQLのアプリケーションをHerokuにデプロイする手順(Heroku.yml)

#どんな記事か
- Rails+MySQLのアプリケーションをDockerで環境構築した人が、**herokuで本番環境を構築**できるようになる。

#対象読者
- DockerでRails+MySQLを起動して、「Yay! You’re on Rails!」を表示している人。
- 本番環境にも反映して誰からにも見せたい人。
- デプロイのエラーで躓いて困っている人。

#完成後のイメージと各ツールのバージョン
今回こちらの実機で確認しました。
- macOS Mojave 10.14.5
- Ruby 2.6.3
- MySQL 5.7
- Heroku 7.29
- Git 2.20.1


![localhost_3002_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387875/4b34d407-6466-7798-11e3-5ce7141538f7.png)


#そもそもどうやって、DockerでRails+MySQLの環境構築をすればいいのという方へ？？
こちらのgithubのページで、確認してもらえたらと思います。。
https://github.com/YutakaYamasaki/docker_setup_rubyonrails

ちなみに、今回のソースは全て上記の手順を行なった後、デプロイする形になります。

#やること
- Railsのアプリケーション修正、追加
- Herokuにデプロイ


##Railsアプリケーションのファイルを修正、追加する。

###Gemfile(修正、追加)
ここで、mysqlとpgのgemを修正、追加します。
開発環境ではMySQLを使用しますが、本番環境(デプロイ)ではPostgreSQLを使用していきます。

変更前と変更後です。

```ruby:Gemfile
##変更前
gem 'mysql2', '>= 0.4.4', '< 0.6.0'

##変更後
gem 'mysql2', '>= 0.4.4', '< 0.6.0', groups: %w(test development), require: false
gem 'pg', '~> 0.19.0', group: :production, require: false
```
##database.yml(修正、追記)
こちらのファイルにも、本番環境ではPostgreSQLを使用するので、下記のように修正してください。
``production``の項目がなければ、追記してください。
項目があれば、削除してください。

```yml:database.yml
production:
  <<: *default
  adapter: postgresql
  encoding: unicode
  pool: 5
```

##


##heroku.yml(新規ファイル作成)
heroku.ymlファイルを作成します。
アプリのファイルの直下に、heroku.ymlファイルを作成して、下記のように記載してください。


```yml:heroku.yml
build:
  docker:
    web: Dockerfile
run:
  web: bundle exec puma -C config/puma.rb
```

これで各ファイルの編集が完了しました。
Docker側にもファイルの変更を反映させておきましょう。

```bash
$ docker-compose build
```

誤字脱字がないか確認した後に、
Herokuへデプロイを進めましょう！

#Herokuにデプロイ
基本全てターミナルで行います。ターミナルの操作に慣れているという前提で進めていきます。

##Herokuにログイン
下記のコマンドを打ちます。
途中でエンターキーを押すとブラウザが立ち上がるので、ブラウザで操作してログインが終わると、
ターミナルの方でもログインができます。

```bash
$ heroku login                                                                                                               
heroku: Press any key to open up the browser to login or q to exit: 
##ここでエンターキーを押すとブラウザが開くので、ログインを行う。

##ブラウザでログインができてターミナルに戻ると、下記が表示されるはず
Opening browser to https://cli-auth.heroku.com/auth/browser/**************
Logging in... done
Logged in as *******@email.com
```

##Herokuにアプリケーションを作成する。
下記のコマンドを打ちます。
すると、URLが自動発行されます。

```bash
$ heroku create
##ちなみにcreateの後にスペースキーを押して、好きなアプリ名を入力すると、そのアプリ名のURLが自動発行されます。お試しあれ
Creating app... done, ⬢ *******
https://******.herokuapp.com/ | https://git.heroku.com/*******.git
```
##Heroku側でPostgreSQLを使用する。

Heroku側でPostgreSQLを使用するように設定します。
クレジットカードを登録したり、有料会員になるとMySQLも使用できます。

```bash
$ heroku addons:create heroku-postgresql:hobby-dev                                                                             
Creating heroku-postgresql:hobby-dev on ⬢ ******... free
Database has been created and is available
 ! This database is empty. If upgrading, you can transfer
 ! data from another database with pg:copy
Created postgresql-transparent-70433 as DATABASE_URL
Use heroku addons:docs heroku-postgresql to view documentation
```


ちなみに、このURLにアクセスしてもエラーが出てきます。なぜなら、アプリがHeroku側にないから。
これからアプリをheroku側にアップロードして、デプロイします。


## Heroku.ymlを使ってデプロイする。
Herokuではコンテナ諸々をデプロイすることができます。
その中で、デプロイする方法は２通りあります。
- Container Registry GAを使用してデプロイ
- **Heroku.ymlを使用してデプロイ**←今回はこちらを使用。

詳細は下記見てもらえると
https://devcenter.heroku.com/categories/deploying-with-docker
まずは、Heroku側でStackをcontainerにセットします。

```bash
$ heroku stack:set container
```

その後、下記のコマンドを打って、デプロイをしましょう。

```bash
$ git init
$ git add .
$ git commit -m "******"
$ git push heroku master
```

#デプロイできたか確認する。
下記のコマンドでブラウザが立ち上がり、Railsのアプリケーションがデプロイされているか確認します。

```bash
$ heroku open
```