【Railsアプリケーション】Herokuへデプロイして本番稼働する

# はじめに

Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。

# RilasアプリケーションをHeroku環境で本番稼働する

下記の前提とする。

- `Heroku CLI`の実行環境があり、`Heroku`上にリポジトリがある
- AWS CLIの設定が完了している

# Heroku上のリポジトリ情報を確認する

### `Heroku`上のリポジトリ情報を確認する

```bash
heroku info -a Heroku上のアプリケーション名
```

### 実行結果

```bash
% heroku info -a rails-app
=== rails-app
Auto Cert Mgmt: false
Collaborators:  rails-app@gmail.com
Dynos:          
Git URL:        https://git.heroku.com/rails-app.git
Owner:          final-task@herokumanager.com
Region:         us
Repo Size:      0 B
Slug Size:      0 B
Stack:          heroku-20
Web URL:        https://rails-app.herokuapp.com/
```

# Heroku上のリポジトリ情報を登録する

上記で確認したリポジトリ情報を登録する。

ローカルのアプリケーションフォルダ内で実行しないと`fatal: not a git repository (or any of the parent directories): .git`というエラーが出るため注意。

### `Heroku`上のリポジトリ情報を登録する

```bash
git remote add heroku (Git URL)
```

### 実行結果

```bash
% git remote add heroku https://git.heroku.com/rails-app.git          
% git remote -v
heroku  https://git.heroku.com/rails-app.git (fetch)
heroku  https://git.heroku.com/rails-app.git (push)
origin  https://github.com/test/rails-app.git (fetch)
origin  https://github.com/test/rails-app.git (push)
```

# Heroku上へコードをデプロイ

Heroku上にコードをデプロイする。 デプロイしたいブランチ名を`testbranch`と仮定する。

### 実行コマンド

これはHerokuリポジトリ（https://git.heroku.com/rails-app.git）にプッシュするという意味。

```bash
git push heroku testbranch:master
```

### 実行結果

```bash
emote: -----> Discovering process types
remote:        Procfile declares types     -> (none)
remote:        Default types for buildpack -> console, rake, web
remote: 
remote: -----> Compressing...
remote:        Done: 147.1M
remote: -----> Launching...
remote:        Released v5
remote:        **https://**rails-app**.herokuapp.com/** deployed to Heroku                    # アプリケーションのURL
remote: 
remote: This app is using the Heroku-20 stack, however a newer stack is available.
remote: To upgrade to Heroku-22, see:
remote: https://devcenter.heroku.com/articles/upgrading-to-the-latest-stack
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/rails-app.git
 * [new branch]      testbranch -> master
```

### アプリケーションURL（`https://rails-app.herokuapp.com/`）へアクセス

下記のようになる場合は、エラー。

![スクリーンショット 2023-01-25 3.01.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2658523/d6b9c3c8-1b5c-042b-b57f-c0a6c2497d8e.png)


# エラー時のログの確認

下記コマンドなどでアプリケーションのログを確認して対応する。

（今回の場合は、MySQLの構築がされていないためエラーとなっている。ログはメモるの忘れた）

```bash
heroku logs --source=app --tail
```

# Heroku上でMySQLの環境を構築する

### データベースの接続情報を作成

`JAWSDB_URL`は`JawsDB`プラグインから提供される環境変数で、ユーザー名やパスワードを含めデータベースに接続するためのすべての情報が格納されている。

```bash
heroku addons:create jawsdb:kitefin
```

### `config/database.yml`の編集

前述のコマンドで作成したデータベースの接続情報を追記する。

```ruby
production:
  <<: *default
  url: <%= ENV['JAWSDB_URL']&.sub('mysql://', 'mysql2://') %>
```

### Heroku環境へデプロイする

上記の作業が完了したら、Heroku環境へデプロイする。

ただ、まだデータベースの設定が完了していないためエラーとなる。

# データベースの設定

必要とするテーブルや初期データを生成する必要がある。

### 実行コマンド

```bash
heroku run bin/rails db:migrate
```

> `heroku run`は任意のコマンドを`Heroku`上で実行するためのコマンド。
ここでは、`bin/rails db:migrate`を実行している。
> 

ここまで完了すれば、Heroku上でアプリケーションが稼働できるはず。。

# 参考

https://qiita.com/Chinats/items/c00df6e3ca81184606fe