記事概要
RenderでRailsアプリをデプロイする方法について、まとめる。
Renderとは
アプリケーションの公開、運用を行うためのプラットフォームを提供するサービス。基本機能だけであれば無料で使用でき、デプロイが容易であることから注目を集めている
言語やフレームワーク
使用技術 | |
---|---|
フロントエンド | HTML |
バックエンド | Ruby Ruby on Rails |
データベース | PostgreSQL |
インフラ | Render |
API | - |
その他 | - |
前提
- Renderにアカウント登録し、GitHubと連携している
- ローカル開発環境で、Webアプリケーションを開発済みである
- PostgreSQLをインストール済みである
インストール方法は、こちらを参照 - GitHubにコードを連携済みである
GitHubへの連携方法は、こちらを参照
手順①(アプリ設定)
- PostgreSQLを使用できるように、Gemを追加する
Gemの追加は、こちらを参照 - Render用の設定ファイルを追加する
-
bin
フォルダに、render-build.sh
ファイルを手動作成する - ファイルに下記を記述する
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 # シード値を追加する場合は記述
-
- DBの設定を変更するため、
config/database.yml
を編集するdatabase.ymldevelopment: # 中略 database: [アプリ名]_development test: # 中略 database: [アプリ名]_test
- Gemfile.lockの設定を変更する
# アプリのディレクトリに移動 % cd ~/[アプリ名] # Gemfile.lockに設定を追加 % bundle lock --add-platform x86_64-linux
- アプリをクローン作成していない場合は、手順②へ進む
-
config/credentials.yml.enc
を削除する - ターミナル.appで下記を実行する
# アプリのディレクトリに移動 % cd ~/[アプリ名] # 秘密情報管理用のファイルを作成 ※秘密情報管理用のファイルが存在すると、作成されない % EDITOR="vi" bin/rails credentials:edit
- 実行結果を確認する
- 「escキー」→「:」→「q」と入力し、「enterキー」を押してファイルを閉じる
- 下記2ファイルが生成されていることを確認する
- config/credentials.yml.enc
- config/master.key
-
手順②(GitHub)
- GitHubへプッシュする
プッシュ方法は、こちらを参照
手順③(RenderでDB作成)
- Renderに、ログインする
- ヘッダーに表示されている「+ New」のボタンをクリックする
- 「PostgreSQL」を選択する
- DB名(
[アプリ名]_production
)を入力する
- リージョンを
Ohio
に変更する
- Instance Typeを
Free(無料)
に変更する
- 「Create Database」をクリックする
- DB作成が開始される
- 「Status」が
Available
に変更されると、DB作成が完了している - 「Internal Database URL」をコピーし、保管する
手順④(Renderでアプリ作成)
- ヘッダーに表示されている「+ New」のボタンをクリックする
- 「Web Service」を選択する
- GitHub
- Name欄にアプリケーションの名称を入力する
※エラーになるため、アプリケーション名に_
を使用しないこと
※他のユーザーと重複したアプリ名は使用できない
- Languageを
Ruby
に変更する - リージョンを
Ohio
に変更する
- 初期状態で入力されているコマンドを削除して、以下の内容をコピペする
入力欄 入力内容 Build Command ./bin/render-build.sh Start Command bundle exec puma -C config/puma.rb - Instance Typeを
Free(無料)
に変更する
- 環境変数を設定(マスターキー)
- VSCodeでアプリの
config/master.key
の内容をコピーする - Renderの「RAILS_MASTER_KEY」項目の右側にペーストする
- VSCodeでアプリの
- 環境変数を設定(データベースURL)
- 「Add Environment Variable」のボタンをクリックし、環境変数を追加する
- 左側に「DATABASE_URL」と入力する
- 右側にデータベース作成時にコピーした「Internal Database URL」の内容をペーストする
- 「Deploy Web Service」のボタンをクリックする
- ターミナルが表示され、デプロイ作業が開始される
- デプロイ完了後、緑色のアイコンで「Live」と表示され、ターミナルに「Puma starting in cluster mode...」という文字が見える
手順⑤(アプリ確認)
- リンクをクリックする
- ローカルで作った通り、アプリが表示されれば成功である
デプロイが完了したとメッセージが表示されているにもかかわらず、アプリケーションが表示されない場合、20~30分後に再確認する
データベースを休止状態にする
- Renderのダッシュボードにアクセスする
- 休止させるデータベースを選択する
- 「Suspend Database」ボタンをクリックする ※1番下までスクロール
- 休止させるとボタンの表示が変わり、「Resume Database」となる
データベースの休止状態を解除する
- 「Resume Database」をクリックする
→再度利用可能になる
自動デプロイを停止する
- Renderのダッシュボードにアクセスする
- 自動デプロイを停止するアプリを、選択する
- メニューから「Settings」を選択する
- 「Build & Deploy」グループの中に「Auto-Deploy」という項目があるので、「Edit」ボタンをクリックする
- 「Yes」と書かれたプルダウンメニューをクリックする
- メニューが開くので、「No」をクリックする
- 「Save changes」をクリックする
補足:ストレージサービスが必要
ユーザーがアップロードした画像データは、データベースが停止またはリフレッシュされる度に、消えてしまう仕様
→ストレージサービスを利用することで、画像を長期的に保存することができるようになる
Rails特定のディレクトリに入れると画像やアイコンのファイルは消えてしまう。S3のバケットに画像を置き、そこから公開用のリンクを利用してアプリで表示する
補足:サーバがスリープ状態になる
しばらくアクセスがないと「スリープ状態」になる
アプリを動かしているサーバ自体が起動していない状態になり、アクセスが来て初めてサーバを起動する形になるため、サーバの起動時間がかかる分アプリの画面がブラウザに表示されるまでに非常に長い時間を有する
「UptimeRobot」というサービスを使うと、Renderでデプロイしたアプリに対して定期的に自動でリクエストを行い、スリープ状態になることを防いでくれる
UptimeRobotの使用方法は、こちらを参照