【Render】Railsアプリをデプロイする方法について

# 記事概要
RenderでRailsアプリをデプロイする方法について、まとめる。

# Renderとは
アプリケーションの公開、運用を行うためのプラットフォームを提供するサービス。基本機能だけであれば無料で使用でき、デプロイが容易であることから注目を集めている

https://render.com/

# 言語やフレームワーク
|| 使用技術 |
| ---- | ---- |
| フロントエンド | HTML |
| バックエンド | Ruby <br> Ruby on Rails |
| データベース | PostgreSQL |
| インフラ | Render |
| API | - |
| その他 | - |

# 前提
- [Render](https://render.com/)にアカウント登録し、GitHubと連携している
- ローカル開発環境で、Webアプリケーションを開発済みである
- PostgreSQLをインストール済みである
  インストール方法は、[こちら](https://qiita.com/likapantrip/items/ab6229fa0c205b7d9266)を参照
- GitHubにコードを連携済みである
    GitHubへの連携方法は、[こちら](https://qiita.com/likapantrip/items/9f4876305bd9261281aa)を参照

# 手順①(アプリ設定)
1. PostgreSQLを使用できるように、Gemを追加する
    Gemの追加は、[こちら](https://qiita.com/likapantrip/items/c8718db9a4e72b7c6ad0#pg)を参照
1. Render用の設定ファイルを追加する
    1. `bin`フォルダに、`render-build.sh`ファイルを手動作成する
    1. ファイルに下記を記述する
        ```render-build.sh
        #!/usr/bin/env bash
        # exit on error
        set -o errexit
        
        bundle install
        bundle exec rake assets:precompile
        bundle exec rake assets:clean
        bundle exec rake db:migrate
        bundle exec rails db:seed # シード値を追加する場合は記述
        ```
1. DBの設定を変更するため、`config/database.yml`を編集する
    ```database.yml
    development:
      # 中略
      database: [アプリ名]_development
    
    test:
      # 中略
      database: [アプリ名]_test
    ```
1. Gemfile.lockの設定を変更する
    ```
    # アプリのディレクトリに移動
    % cd ~/[アプリ名]
    
    # Gemfile.lockに設定を追加
    % bundle lock --add-platform x86_64-linux
    ```
1. アプリをクローン作成していない場合は、手順②へ進む
    1. `config/credentials.yml.enc`を削除する
    1. ターミナル.appで下記を実行する
        ```
        # アプリのディレクトリに移動
        % cd ~/[アプリ名]
        
        # 秘密情報管理用のファイルを作成　※秘密情報管理用のファイルが存在すると、作成されない
        % EDITOR="vi" bin/rails credentials:edit
        ```
    1. 実行結果を確認する
    1. 「escキー」→「:」→「q」と入力し、「enterキー」を押してファイルを閉じる
    1. 下記2ファイルが生成されていることを確認する
        - config/credentials.yml.enc
        - config/master.key

# 手順②(GitHub)
1. GitHubへプッシュする
    プッシュ方法は、[こちら](https://qiita.com/likapantrip/items/8fec769ebaa5c7c9d660)を参照

# 手順③(RenderでDB作成)
1. [Render](https://render.com/)に、ログインする
1. ヘッダーに表示されている「+ New」のボタンをクリックする
    [![Image from Gyazo](https://i.gyazo.com/97c07bf476eb54fb993ae4e73c344c43.png)](https://gyazo.com/97c07bf476eb54fb993ae4e73c344c43)
1. 「PostgreSQL」を選択する
    [![Image from Gyazo](https://i.gyazo.com/06a53e6bd79a588e569e0db0ad3e2ff5.png)](https://gyazo.com/06a53e6bd79a588e569e0db0ad3e2ff5)
1. DB名(`[アプリ名]_production`)を入力する
    [![Image from Gyazo](https://i.gyazo.com/ea185dc792c71a847bd21700b23c51f7.png)](https://gyazo.com/ea185dc792c71a847bd21700b23c51f7)
1. リージョンを`Ohio`に変更する
    [![Image from Gyazo](https://i.gyazo.com/999546248ce366ed39001177ec1739ce.png)](https://gyazo.com/999546248ce366ed39001177ec1739ce)
1. Instance Typeを`Free(無料)`に変更する
    [![Image from Gyazo](https://i.gyazo.com/3e728e081b47829baacdf68f62642c0e.png)](https://gyazo.com/3e728e081b47829baacdf68f62642c0e)
1. 「Create Database」をクリックする
1. DB作成が開始される
1. 「Status」が`Available`に変更されると、DB作成が完了している
1. 「Internal Database URL」をコピーし、保管する

# 手順④(Renderでアプリ作成)
1. ヘッダーに表示されている「+ New」のボタンをクリックする
    [![Image from Gyazo](https://i.gyazo.com/97c07bf476eb54fb993ae4e73c344c43.png)](https://gyazo.com/97c07bf476eb54fb993ae4e73c344c43)
1. 「Web Service」を選択する
    [![Image from Gyazo](https://i.gyazo.com/a3e54c78c8df914388d1bf8086bee3d1.png)](https://gyazo.com/a3e54c78c8df914388d1bf8086bee3d1)
1. GitHub
    1. GitHubのリポジトリと連携させるための設定画面が表示される
        [![Image from Gyazo](https://i.gyazo.com/fe3fceb5071e44668ac2c2d09d0b738b.png)](https://gyazo.com/fe3fceb5071e44668ac2c2d09d0b738b)
    1. デプロイしたいリポジトリを選択する
        [![Image from Gyazo](https://i.gyazo.com/0a9c1ca11a265d3cadb4aab6e746f67b.png)](https://gyazo.com/0a9c1ca11a265d3cadb4aab6e746f67b)
1. Name欄にアプリケーションの名称を入力する
    エラーになるため、アプリケーション名に`_`を使用しないこと
    [![Image from Gyazo](https://i.gyazo.com/76d0a304fd28828273f2e643b65d6ead.png)](https://gyazo.com/76d0a304fd28828273f2e643b65d6ead)
1. リージョンを`Ohio`に変更する
    [![Image from Gyazo](https://i.gyazo.com/f1264ce9b9829ee0d58a9a1b37b52987.png)](https://gyazo.com/f1264ce9b9829ee0d58a9a1b37b52987)
1. 初期状態で入力されているコマンドを削除して、以下の内容をコピペする
    |入力欄|入力内容|
    |-|-|
    |Build Command|./bin/render-build.sh|
    |Start Command|bundle exec puma -C config/puma.rb|
1. Instance Typeを`Free(無料)`に変更する
    [![Image from Gyazo](https://i.gyazo.com/8c2f5c47626d9515442a4f9e877ab9be.png)](https://gyazo.com/8c2f5c47626d9515442a4f9e877ab9be)
1. 環境変数を設定（マスターキー）
    1. VSCodeでアプリの`config/master.key`の内容をコピーする
    1. Renderの「RAILS_MASTER_KEY」項目の右側にペーストする
1. 環境変数を設定（データベースURL）
    1. 「Add Environment Variable」のボタンをクリックし、環境変数を追加する
    1. 左側に「DATABASE_URL」と入力する
    1. 右側にデータベース作成時にコピーした「Internal Database URL」の内容をペーストする
1. 「Deploy Web Service」のボタンをクリックする
1. ターミナルが表示され、デプロイ作業が開始される
1. デプロイ完了後、緑色のアイコンで「Live」と表示され、ターミナルに「Puma starting in cluster mode...」という文字が見える

# 手順⑤(アプリ確認)
1. リンクをクリックする
    [![Image from Gyazo](https://i.gyazo.com/0b008b5a1049debbeeaa188148672fd9.png)](https://gyazo.com/0b008b5a1049debbeeaa188148672fd9)
1. ローカルで作った通り、アプリが表示されれば成功である
    デプロイが完了したとメッセージが表示されているにもかかわらず、アプリケーションが表示されない場合、20~30分後に再確認する

# データベースを休止状態にする
1. [Renderのダッシュボード](https://dashboard.render.com/)にアクセスする
1. 休止させるデータベースを選択する
1. 「Suspend Database」ボタンをクリックする　※1番下までスクロール
1. 休止させるとボタンの表示が変わり、「Resume Database」となる

# データベースの休止状態を解除する
1. 「Resume Database」をクリックする
    →再度利用可能になる

# 自動デプロイを停止する
1. Renderのダッシュボードにアクセスする
1. 自動デプロイを停止するアプリを、選択する
1. メニューから「Settings」を選択する
1. 「Build & Deploy」グループの中に「Auto-Deploy」という項目があるので、「Edit」ボタンをクリックする
1. 「Yes」と書かれたプルダウンメニューをクリックする
1. メニューが開くので、「No」をクリックする
1. 「Save changes」をクリックする