Renderでのデプロイ

# この記事について
Herokuでのデプロイの予定だったが、有料化に伴いRenderを使用してデプロイを行ったので手順についてまとめます。
render公式の手順を参考に進めていきます。

https://render.com/docs/deploy-rails

# 事前準備
アプリ作成済み
Github連携済み

# 1.Renderに登録する
- まずは下記URLからrenderに登録します。

https://render.com/

# Webサービスの作成
ログインしたら`New+`をクリックし、`Web Service`を選択する
![スクリーンショット 2023-06-20 17.58.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2904183/7c425d06-3b1c-60c1-dfc2-862378e27bb3.png)

すると以下の画面になるので、右側にある`Configre account`をクリックします。
![スクリーンショット 2023-06-20 18.10.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2904183/4d036476-7ac8-c9db-4243-4b20976d62b4.png)

githubのページに転移するので、`Repository access`の`Only select repositories`の`Select repositories`からレポジトリを選択し、Saveをクリックします。
![スクリーンショット 2023-06-20 18.18.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2904183/998b2443-642b-bd1a-768f-6ec7ee522eb4.png)

renderのページに戻ったら、対象のリポジトリの右側にある`Connect`をクリックしてください。
![スクリーンショット 2023-06-20 18.20.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2904183/9ad368e3-2f4b-2f13-1662-9a4c220af13c.png)

フォームが表示されますので、情報を記入していきます。

Name:作成したサイト名
Region:Singapore (Southeast Asia)←日本が選択できないため、最も地理的に近い「Singapore」を選択しています。
Branch:main(masterの方もいると思いますので適宜記入)
Root Directory:とりあえず空欄
Runtime:Ruby
Build Command:後ほど修正できるため一旦そのまま
Start Command:後ほど修正できるため一旦そのまま
Plans:Free
Advanced 後ほど修正できるため一旦そのまま
ここまで記入したら`Create Web Service`をクリックします。
![スクリーンショット 2023-06-20 18.25.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2904183/7090a2ed-30a0-9d05-e9ee-28b7ada81f6e.png)
すると、作成したアプリのページが開かれます
![スクリーンショット 2023-06-20 18.38.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2904183/9c0c25dc-1520-0e02-5382-8388c8ecba4b.png)
これでWebサービスの作成は終了です。
# 2.データベースの作成
続いてデータベースの作成を行います。
右上のNew+ボタンをクリック,`PosgreSQL`を選択します。
![スクリーンショット 2023-06-20 18.46.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2904183/35f0fdc8-dc75-5bce-9b54-4097e4072130.png)
フォームに以下の情報を記入します。
Name:データベースの名前
Database:データベースの名前 
User:ユーザー名
Region:Singapore (Southeast Asia)
PostgreSQL Version 人によって変わるため分からない方は、ターミナルで`psql --version`のコマンドを打ち込んでバージョンを確認してください。
Datadog API Key:記入しない
Plans:Free
Create Databaseをクリックするとデータベースが作成されます。
![スクリーンショット 2023-06-20 18.48.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2904183/1236c24b-9dbb-138d-ace9-4418e67294f0.png)
これでデータベースが作成されました。

# 3.ファイルの作成、編集
続いて諸々のファイルの編集、作成を行います。

まずは、以下ファイルの部分をコメントアウト、編集します。
```diff_ruby:config/puma.rb
- # preload_app!
+ preload_app!

- # workers ENV.fetch("WEB_CONCURRENCY") { 2 }
+ workers ENV.fetch("WEB_CONCURRENCY") { 4 } 
```

```diff_ruby:config/production.rb
- config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

+ config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? || ENV['RENDER'].present?
```

続いてデプロイ用のファイルを作成します。
```ruby:bin/render-build.sh
#!/usr/bin/env bash
# exit on error
set -o errexit

bundle install
yarn install
bundle exec rails assets:precompile
bundle exec rails assets:clean
bundle exec rails webpacker:install
bundle exec rails webpacker:compile
bundle exec rails db:migrate
```
このファイルがデプロイ時に実行されますのでrender側で設定する必要があります。
Webアプリのページから左側の`Settings`をクリックし、下の方にいくと`Build Command`という欄がありますのでそこに以下コマンドを記入して
![スクリーンショット 2023-06-20 19.08.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2904183/567700a9-4499-f970-dac5-96a5f4cc9b23.png)
```diff_ruby
- $ bundle install; bundle exec rake assets:precompile; bundle exec rake assets:clean;

+ ./bin/render-build.sh
```

次はデータベースの設定を行います。
本番環境ではPostgreSQLを使用するため、以下のようにdatabase.ymlの設定を変更します。
※赤くなっているところを修正してください。

```ruby:config/database.yml
databases:
  - name: データベース名
    databaseName: データベース名
    user: ユーザー名
    region: singapore

services:
  - type: web
    name: アプリ名
    env: ruby
    region: singapore
    buildCommand: "./bin/render-build.sh"
    startCommand: "bundle exec puma -C config/puma.rb"
    envVars:
      - key: データベースのURL
        fromDatabase:
          name: データベース名
          property: connectionString
      - key: マスターキー
        sync: false
```
そして、`startCommand: "bundle exec puma -C config/puma.rb"`という一行をrender側で設定します。
Webアプリページの`Settings`の`Start Command`を編集します。
```diff_ruby
- $ bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}

+ bundle exec puma -C config/puma.rb
```

# 4.環境変数の設定
Webアプリページの`Environment`から`Add Environment Variable`をクリックすると、keyとValueの設定が可能となります。

下記のように`DATABASE_URL`と`RAILS_MASTER_KEY`を設定します。
![スクリーンショット 2023-06-20 19.27.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2904183/24c9aff8-ebbc-fb0e-45d1-b008013db4f2.png)


- DATABASE_URLの確認
データベースのページの`Connections`というところに`Internal Database URL`という項目があるのでその値を上記画像のvalueの部分に貼り付けてください。

- RAILS_MASTER_KEYの確認
プロジェクトファイルのconfig > master.keyに記載されている文字列を上記画像のvalueの部分に貼り付けてください。

# 5.プロジェクトフォルダ内での環境設定
`.env`に`Connections`に記載されている値を設定します。
マスターキーは先程確認したものを設定してください。

```ruby:.env
任意の環境変数名 = 'Passwordの値'
任意の環境変数名 = 'Internal Database URLの値'
任意の環境変数名 = 'master.keyの値'
```
これで環境変数の設定は完了です。

# 6.Githubにアップロード
最後に、Githubにアップロードして、URLをクリックして確認してみてください。
無事、自分が作成したアプリが表示されれば完了です。

参考記事
- [render公式](https://render.com/)
- [renderデプロイ手順](https://render.com/docs/deploy-rails) 
- [【完全版】Rails Renderデプロイガイド
](https://qiita.com/yuuki-h/items/9f594c046a6e676eb8f8)