LoginSignup
0
1

More than 1 year has passed since last update.

Render.comへrails appをdeploy

Posted at

Render.とは?

簡単に言うとRender.comはherokuのようなweb hosting serviceです。

Herokuの無料プラン提供終了に伴い、学習用に無料で使用できるサービスを探していく中で良さそうだなと思ったので試してみました。

とは言え後で分かったなのですが、DBは作成後90日間無料で使用できますがそれ以降は2週間以内に有料プランに移行しないと削除されてしまうという事なので注意が必要です。

投稿の目的

率直に言うと自分の理解を深めるのが一番の狙いですが、Render.comへのdeploy方法の記事は存在しているもののまだまだ情報が少ないと感じたので参考になる方がいるかもしれないと思い投稿してみました。私が以前deployした時に詰まったところも共有できたらと考えています。

以下の動画でStripeをRailsに実装する方法を学習していく中でherokuへdeployする必要があったのですが、学習用に有料サービスは使いたくないと思い無料で使えるRender.comにdeployする事にしました。

以下を参考にdeployしていきます。

新規プロジェクト作成時の注意点

Render.comのDBはpostgreSQLに対応しているようですので、新規プロジェクト作成時には

rails new mysite --database=postgresql

のような形でDBにpostgreSQLを指定する事をオススメします。指定しないと開発環境のDBがsqlite3で作成されると思うのですが、deploy時にpostgresqlへ移行の手間がかかります。移行の仕方は上記でも解説されてますがこの作業が生じないにこした事はないので、そこを強調した上で移行の説明は割愛します。

プロジェクト用のrepositoryがない場合は事前に作成しておいてください。

本番deployの準備

(1) config/database.ymlを開きproductionの部分を以下に置き換える

config/database.yml
production:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>

これによりRender.comのダッシュボードからDBのURLを環境変数として追加可能になります。

(2) config/puma.rb

config/puma.rb
workers ENV.fetch("WEB_CONCURRENCY") { 2 }

config/puma.rb
preload_app!

についてる#を外して有効化します。公式ではworkersENV.fetch("WEB_CONCURRENCY") { 4 }だがworkersENV.fetch("WEB_CONCURRENCY") { 2 }のままで以前は問題なかったのでここは無視して進めます。

(3) config/environments/production.rbconfig.public_file_server.enabledの行を以下に置き換える。

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

Build Scriptの作成

binフォルダ内にrender-build.shというファイルを作成し以下を貼り付ける。

bin/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

次にターミナルから

chmod a+x bin/render-build.sh

を走らせてこのscriptが走る事を確認する。

Render.comへのdeploy準備

プロジェクトのroot directoryにrender.yamlというファイルを作成し以下を貼り付ける。

render.yaml
databases:
  - name: shoplify
    databaseName: shoplify
    user: shoplify

services:
  - type: web
    name: shoplify
    env: ruby
    buildCommand: './bin/render-build.sh'
    startCommand: 'bundle exec puma -C config/puma.rb'
    envVars:
      - key: DATABASE_URL
        fromDatabase:
          name: shoplify
          property: connectionString
      - key: RAILS_MASTER_KEY
        sync: false

shoplifyはYouTube動画で作成しているプロジェクト名ですが、この部分は好きなプロジェクト名に変更しても問題ありません。後にDBやWeb Service作成時に必要になります。

ここまで出来たらGitHubもしくはGitLabのrepositoryへpushしてください。

Deploy編

GigHubとGitLabとGoogleを経由でsign in可能なので登録は特に必要ないです。私はGitHubからdeployするのでGitHUb経由でsign inしてます。

① DB作成
DashboardからNewボタンをクリックしてすると選択肢が出てくるのでPostgreSQLを選択。

Screenshot 2023-03-18 at 23.08.08.png

NameDatabaseUserrender.yamlで入力した値を入力(私の場合はshoplify)してCreate Databaseをクリック。

image.png

これでDBが作成されます。

image.png

② Web Service作成

DashboardからNewボタンをクリックしてすると選択肢が出てくるのでWeb Serviceを選択。

image.png

Configure accountをクリックしてRender.comに繋げるアカウントを選択。

image.png

image.png

Repository accessを設定する。私はOnly select repositoriesを選択し、接続するreposotiryを指定。私はshoplifyを選択。

image.png

Connect a repositoryのところでshoplifyを選択

image.png

詳細入力画面でrender.yamlに入力したプロジェクト名を入力。私の場合はshoplify

image.png

次にBuild CommandとStart Commandにrender.yamlの値を入力する。

image.png

最後にAdvancedAdd Environmental Variableから環境変数を追加。

DATABASE_URLの値ですが、dashboardで先ほど作成したDBを選択し、ConnectionsにあるInternal Database URLをコピペして入力。

RAILS_MASTER_KEYconfig/master.keyに記されている値をそのまま入力。

image.png

ここまで出来たらCreate Web Serviceをクリック。

これでdeployできたかと思いましたが残念ながら失敗。ログを見ると

$ bundle lock --add-platform x86_64-linux

を走らせる必要があるようです。参考までに以下の記事にもこの部分の解説がありました。

上記を走らせてからrespositoryにpushして再度deployしたところ成功しました!

image.png

最後に

途中で気づいたのですがRender.comではDBが1つしか無料で有効化できないようなので使い勝手が良いとは言えず、情報が少ないのもそのせいな気がしてます。

とは言えheroku以外へのdeploy経験ができたので個人的には前向きに捉えてます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1