【Heroku】herokuでRailsアプリをデプロイする際の基本的な手順のまとめ

## 本記事の前提
**使用環境**
- Rails 5.2.6.2
- ruby 2.6.6
- git 2.18.5
- AWS Cloud9

**省略作業**
- Herokuアカウントの登録
- Gitのインストール
- デプロイするアプリの作成

## デプロイする手順
### 1.Heroku CLIのインストール
Herokuの操作をコマンドラインから行えるようにするために、Heroku CLIをインストールしていきます。
以下の公式サイトからご自身のOSに合ったものをインストールして下さい。

https://devcenter.heroku.com/articles/heroku-cli

**AWS Cloud9の場合**
以下のコマンドを全てコピーし、ターミナルに貼り付けて実行して下さい。
```terminal:terminar
$ curl -OL https://cli-assets.heroku.com/heroku-linux-x64.tar.gz
tar zxf heroku-linux-x64.tar.gz && rm -f heroku-linux-x64.tar.gz
sudo mv heroku /usr/local
echo 'PATH=/usr/local/heroku/bin:$PATH' >> $HOME/.bash_profile
source $HOME/.bash_profile > /dev/null
```

### 2.デプロイするアプリのディレクトリに移動しherokuにログインする
```terminal:terminar
$ cd アプリ名
$ heroku login --interactive //herokuにログインするためのコマンド
```
メールアドレスとパスワードが求められるので、それぞれ入力しエンターを押して、無事にログインに成功すると、**Logged in as Eメールアドレス**と表示されますので確認して下さい。

### 3. Railsアプリをデプロイするための流れ
大きく以下のような項目に分けてRailsアプリの設定を変更していきます
**3-1. rails_12factorの導入**
静的アセットファイルをHeroku上でうまく動作するように調整してくれるGemになります。以下のようにGemfileに下記の記述を追加して下さい。
```ruby:Gemfile
group :production do
  gem 'rails_12factor'
end
```

**3-2. Gemfileの各項目の設定変更**
次にGemfileの内容をデプロイできる状態に変更していきます。
まず、gem 'sqlite3'と記述がある部分をコメントアウトにします。
```ruby:Gemfile
# gem 'sqlite3'
```
次に、group :development, :test do - endの中にgem 'sqlite3'を追記します。
```ruby:Gemfile
group :development, :test do
  gem 'sqlite3'
end
```
そして本番環境でPostgreSQLを使っていくために、以下のような設定を追記します。
```ruby:Gemfile
group :production do
  gem 'pg'
end
```
最後にGemfileの変更を適用するためbundle installを実行します。このとき本番環境に関係するproduction以外の部分を対象とするため、以下のようなオプションをつけてコマンドを実行していきます。
```terminal:terminar
$ bundle install --without production
```

**3-3. config/datebase.ymlの設定変更**
本番環境で実際にデータベースと接続するための設定を変更するため**datebase.yml**のproduction:以降を以下のように変更していきます。このときproduction:直下の記述が半角スペース２個分空いていることを確認して下さい。
```ruby:config/datebase.yml
production:
  <<: *default
  adapter: postgresql
  encoding: unicode
  pool: 5
```

**3-4. config/environments/production.rbの設定**
続いて本番環境でassets以下のフォルダから動的な画像の表示していくためにproduction.rbの次の記述をtrueに変更していきます。
```ruby:config/environments/production.rb
config.assets.compile = true
```

**3-5. Heroku上にアプリを作成する**
ここからHeroku上にアプリを作成していきます。ここでHerokuではGitコマンドでアプリを登録していく関係で、ローカルリポジトリを作成されていない場合は```git init```コマンドから作成しましょう。それからheroku createコマンドで新しいアプリを作成していきます。このときアプリ名を指定したい場合は、```heroku create アプリ名```とすると指定できますが、既に使用されている名前の場合は指定できないので注意して下さい。
```terminal:terminar
$ git init
// ローカルリポジトリ作成後
$ heroku create
```
ここで、ターミナルに表示されたアプリのURLにアクセスしてアプリが作成されていることを確認しましょう。
そして、Gitコマンドからファイルの管理が済んでいない方は以下のようにGitコマンドを実行して下さい。
```terminal:terminar
$ git add .
$ git commit -m "upload to heroku"
```

そしていよいよアプリのデプロイになります。```git push heroku master```からアプリのプッシュを行い、それが終わったら本番環境でのデータベースの作成を```heroku run rails db:migrate```コマンドで実行します。
```terminal:terminar
$ git push heroku master
// 終わり次第以下のコマンドでデータベースを作成する
$ heroku run rails db:migrate
```

## 補足情報
- デプロイしたアプリのURLや情報は以下は```heroku apps:info```コマンドから確認できます。
```terminal:terminar
$ heroku apps:info
```

- 本番環境にdb/seeds.rbに記述した初期データを登録するためには、```heroku run rake db:seed```を実行して反映させていきます。
```terminal:terminar
$ heroku run rake db:seed
```

- デプロイ後のアプリの更新については、先程と同様にGitコマンドから変更したファイルを反映させます。
```terminal:terminar
$ git add .
$ git commit -m "update to heroku"
$ git push heroku master
```

- **こんなエラーが発生したとき**
![スクリーンショット 2022-03-03 10.40.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694767/e30c31a3-f9c1-2970-db44-c32927d42bfb.png)
こちらの記事の内容を参考にしてみて下さい。

https://qiita.com/renyoshizawa0515/items/53fc3487f79df73c8dcb

## 参考記事
1. [【初心者向け】railsアプリをherokuを使って確実にデプロイする方法【決定版】](https://qiita.com/kazukimatsumoto/items/a0daa7281a3948701c39)
2. [RailsアプリをHerokuにデプロイする手順](https://qiita.com/d0ne1s/items/59b5d9ed69e822c5b39c)
3. [herokuで本番環境にデータ投入](https://qiita.com/show1107/items/5dbdac581d561909cf84)