RailsアプリをRenderにデプロイする

2022年12月でHerokuが有料化してから無料で公開できるサービスへの移転先が色々出てきました。
その中でRenderというサービスが使われているとの情報があるので使ってみました。
https://render.com/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/ee9586b2-7d92-d257-f326-dc1ee0ef8e81.png)

以下Renderにデプロイするための修正方法について記載します。ちなみにRenderにはproduction環境としてデプロイする前提にしてますが、適宜Staging, Developmentにするなどして読み替えてください。

## Railsアプリケーションを作成する
ここは省略。皆さんで開発されたものをGithubにリポジトリ切ってPushするのをお忘れなく。
Privateリポジトリで出来るかは不明だけど、当方はPublicリポジトリで試しました。

## Render用に以下を修正する

```config/application.rb
  # Hosts を追加
    config.hosts << 'sample-rails.onrender.com'
```

```render.yaml
databases:
  - name: pg
    databaseName: (後でRenderで設定するDBのDatabase名）
    user: (後でRenderで設定するDBへのログインID）
    region: (後でRenderで設定するDBのリージョン）

services:
  - type: web
    name: (後でRenderで設定するWEBアプリ名）
    env: ruby
    region: (後でRenderで設定するWEBアプリのリージョン）
    plan: free
    buildCommand: "./bin/render-build.sh"
    startCommand: "bundle exec puma -C config/puma.rb"
    envVars:
      - key: DATABASE_URL
        fromDatabase:
          name: (後でRenderで設定するWEBアプリ名）
          property: connectionString
      - key: RAILS_MASTER_KEY
        sync: false
```

```bin/render-build.sh
#!/usr/bin/env bash
# exit on error
set -o errexit

bundle install
bundle exec rails db:migrate
bundle exec rails db:seed
bundle exec rails assets:precompile
```

```config/environments/production.rb
  # 追加
  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? || ENV['RENDER'].present?
```

```config/puma.rb
  # 変更（下記2つはコメントアウトを外して数字を変更する）
　　　　workers ENV.fetch("WEB_CONCURRENCY") { 4 }

　　　　preload_app!
```

```Gemfile
# Postgresが必要
group :production do
  gem 'pg'
end
```


## Renderにサインアップ
自分のGithubのアカウントでサインアップします。
![New-Web-Service-・-Render-Dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/41c588c3-91dc-4508-6c47-fee39fc06745.png)

自分のアカウントに紐づく複数のリポジトリでRender使うならAllで特定のリポジトリならOnlyの方で。
![Installing-Render.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/b8310b27-acf1-0530-f19f-69854e0bf096.png)

## Web Serviceの作成
まずはWebサービスの作成から
![Render-Dashboard (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/ef3e40ca-5bbb-e844-1fec-ecc87f82f56b.png)

デプロイ対象のブランチを選んでBranchに入れておきます。もちろんInstanceTypeはFreeで。
![Render-Dashboard (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/9ac1a521-5797-4f53-f921-703e204b3154.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/205d534c-1d64-852c-bd07-4d3ed98513d0.png)
ちなみに自分はconfig/database.ymlにこんな設定にしています。
```config/database.yml
default: &default
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

production:
  <<: *default
  host: <%= ENV["SAMPLE_RAILS_HOST"] %>
  database: <%= ENV["SAMPLE_RAILS_DATABASE"] %>
  username: <%= ENV["SAMPLE_RAILS_DATABASE_USERNAME"] %>
  password: <%= ENV["SAMPLE_RAILS_DATABASE_PASSWORD"] %>
  adapter: postgresql
  encoding: utf8
  reconnect: false
  pool: 5
  charset: utf8
  collation: utf8_general_ci
```

## DB(Postgres)の作成
続いてDBも作成します。Dashboardからどうぞ。
![New-PostgreSQL-・-Render-Dashboard (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/ea0c6bb7-6087-1679-0cd2-3798f50779d7.png)


###
![pg-・-Database-・-Render-Dashboard (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/12bd1890-c7bb-42e0-c410-03fae362fd17.png)

## Deploy
現時点では修正都度Buildが走って以下のようなエラー状態になるはずです。
![Render-Dashboard (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/384acad7-38ad-3d23-618f-916d7c0491dd.png)

ここからいくつかまた修正します。
WebのBuild Commandを修正します。
![sample_rails-・-Web-Service-・-Render-Dashboard (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/cf44d0db-668e-cf98-0863-a594d9ef6858.png)

ここを `/opt/render/project/src/bin/render-build.sh` にします。

設定を変更すると勝手にBuildが始まります。
![sample_rails-・-Web-Service-・-Render-Dashboard (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/830e36b3-599d-0720-0fe6-6fa4de9b77ff.png)

![sample_rails-・-Web-Service-・-Render-Dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/dcfe1c5c-f66c-e385-4322-d4d66fbfa224.png)

デプロイ成功するとグリーンのアイコンになります。ログを見てもよし、公開されたアプリを見るもよし。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/0cb46b5a-4a74-d691-1fc9-875395b8108a.png)

立ち上がったアプリを見ているけど、メチャクチャ重い・・・。Free版はリソースがなさすぎなのか？
皆さんのお役に立てば幸いです。