今回は、Ruby on Rails アプリケーションを Render.com にデプロイする方法を解説します。
実際にデプロイしたアプリケーションは以下の URL からアクセスできます。
(後述しますが、無料プランのため、アクセスする際に少し待たされることがあります)
Gemfile を書き換えて postgres に対応させる
まずは、Rails アプリケーションの Gemfile を書き換えて、PostgreSQL に対応させましょう。
デフォルトでは SQLite3
というデータベースが使われていますが、Render.com では PostgreSQL
が使われているため、Gemfile を書き換える必要があります。
Gemfile を開いて、以下の3行を末尾に追加します。
group :production do
gem 'pg'
end
これで、本番環境では pg
という Gem が使われ、PostgreSQL
が使われるようになります。
なお、group :production do
という記述は、本番環境でのみ有効になる設定を書くための記述です。
また、元々使っていた sqlite3
は、開発環境とテスト環境でだけ使われるようになります。
そのため、上の方に書かれていた gem 'sqlite3'
は、group :development, :test do
という記述の中に移動させてください。
(バージョン情報は一例ですので、元々の記述をそのまま移動させてください)
# gem 'sqlite3', '>= 2.1' 削除
# ...略
group :development, :test do
# ...略
gem 'sqlite3', '>= 2.1'
end
では、Gemfile を書き換えたら、以下のコマンドを実行してください。
bundle install
では、変更を一度コミットしておきましょう。
$ git add .
$ git commit -m "PostgreSQL を使うための設定"
$ git push origin main
ちなみに、sqlite3
は本来のデータベースの設定に戻すため、以下のように書き換えておきましょう。
group :development, :test do
gem 'sqlite3'
end
config/database.yml を書き換える
次に、config/database.yml
を書き換えましょう。
※すでに同様の変更を行っている場合は、この手順は不要です。
このファイルは、データベースの接続情報を記述するファイルです。
ただし、データベースの接続情報をソースコード内に直接書くことはセキュリティ上のリスクがあるため、環境変数として設定します。
環境変数とは、アプリケーションが動作するサーバに設定される変数のことです。
これにより、アプリケーションのコードからは環境変数を参照することで、データベースの接続情報を取得することができます。
production
という欄を一度全て消し、以下のように書き換えてください。
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
これで、本番環境では DATABASE_URL
という環境変数を使ってデータベースに接続するようになります。
では、変更を一度コミットしておきましょう。
$ git add .
$ git commit -m "データベースの接続情報を環境変数に設定"
$ git push origin main
これでソースコード側の準備は完了です。
では次に、Neon でデータベースを作成し、Render.com に接続情報を設定していきましょう。
Neon アカウント作成
Neon というデータベース管理サービスを使って、データベースを作成します。
無料プランでデータベースを作成することができますので、こちらを利用します。
https://neon.tech/ にアクセスし、アカウントを作成します。
右上の [Sign Up] を選択します。
GitHub アカウントなどで登録
データベース作成
ダッシュボードに遷移するので、[Create project] を選択します。
すると、データベースに関する設定を求められるので、以下のように設定します。
- Project name: techlog-db
- PostgreSQL version: デフォルトのまま
- Database name: techlog-db
- Cloud Service Provider: AWS
- RegionL: AWS Asia Pacific 1 (Singapore)
設定できたら [Create] を選択します。
すると、データベースが作成されます。
次は、このデータベースに Render.com から接続するための URL を入手しましょう。
画面右上の [Connect] を選択します。
すると、データベースに接続するための情報が表示されます。
Connection string
という欄には、一部マスクされた URL が表示されています。
[Copy snippet] を選択し、クリップボードにコピーします。
コピーできたので、メモ帳などに貼り付けてメモしておきましょう。
これを、のちに Render.com に設定するための環境変数として使います。
Render.com アカウント作成
ではまず、Render.com にアカウントを作成しましょう。
Render.com では、GitHub アカウントを使って登録することができます。
GitHub アカウントで登録すると、GitHub リポジトリと Render.com をスムーズに連携させることができるので、GitHub アカウントで登録することをおすすめします。
Web Service作成
では、Render.com で Web Service を作成しましょう。
今から作る Web Service というのは、Ruby on Rails アプリケーションを動かすためのサーバです。
ダッシュボード右上から [+ New] > [Web Service] を選択します。
次に、デプロイしたい GitHub リポジトリと Render.com を連携させます。
今回は [Git Provider] > [techlog-app] リポジトリを選択すると、自動的に連携されます。
なお、GitHub アカウント以外で Render.com アカウントを登録した場合は、追加の認証が必要になりますので、画面の指示にしたがって認証を進めてください。
デプロイの設定
では、デプロイの設定を行いましょう。
デプロイとは、アプリケーションをサーバにアップロードして、公開することです。
たまに項目名などが変わる可能性もありますが、以下のように設定します。
- Name: techlog-app(デフォルトのまま)
- Language: Ruby
- Branch: main(デフォルトのまま)
- Region: Singapore
- Instance Type: Free
ここで、Instance Type は、無料プランを選択しています。
無料プランは、誰も使っていないときにアプリを一時停止するため、アクセスするときに少し待たされることがあります。
そのため、少しでもポートフォリオとしてのイメージを高めたい場合は、有料プランを選択することをおすすめします。
Build Command の設定
また、デプロイの設定を行う画面の下部には、Build Command という項目があります。
デフォルトでは、以下のようになっているはずです。
bundle install; bundle exec rake assets:precompile; bundle exec rake assets:clean;
これだけですとマイグレーション、つまりテーブルの作成・変更が行われません。
[Build Command] > [Edit] を押して編集モードにしつつ、末尾に以下をそのままコピーして貼り付けてください。
bundle exec rails db:create RAILS_ENV=production; bundle exec rails db:schema:load RAILS_ENV=production;bundle exec rails db:migrate RAILS_ENV=production;
少し長いですが、全体としては以下のようになっているはずです。
bundle install; bundle exec rake assets:precompile; bundle exec rake assets:clean; bundle exec rails db:create RAILS_ENV=production; bundle exec rails db:schema:load RAILS_ENV=production;bundle exec rails db:migrate RAILS_ENV=production;
環境変数の設定(データベースの接続情報)
では次に、Render.com にデータベースの接続情報を設定しましょう。
先ほど、Neon から [Copy snippet] でコピーした情報を使います。
Render.com のダッシュボード上では、左側のメニューから [Environment Variables] を選択します。
そして [Environment Variables] > [+ Add Environment Variable] と選択し、DATABASE_URL
という名前で、先ほどコピーした URL を貼り付けます。
(右側のマスクされている部分に入力しています。
なお、RAILS_MASTER_KEY
という1行は今回は使いませんので、右側のゴミ箱アイコンをクリックして削除してください。
環境変数の設定(SECRET_KEY_BASE)
次に、SECRET_KEY_BASE
という環境変数を設定します。
この環境変数は、Rails アプリケーションがセッション情報を暗号化するために必要なキーです。
ローカルで Rails プロジェクトをターミナルで開き、以下のコマンドを実行してください。
bin/rails secret
値が表示されますので、それをコピーしてください。
そして [Environment Variables] > [+ Add Environment Variable] を選択し、SECRET_KEY_BASE
という名前で、先ほどコピーした値を貼り付けます。
これで、環境変数の設定は完了です。
デプロイ
では、設定が完了したら、デプロイを行いましょう。
ダッシュボード上の [Deploy Web Service] というボタンを押してください。
すると、最新のコミットに基づきデプロイがはじまります。
デプロイ時のログが表示されますので、しばらく待ちましょう。
この時、エラーが出た場合は、ログを確認して原因を特定します。
しばらくするとデプロイが完了しますので、上の方に表示されているURLからアクセスできます。
この URL を転職先などに伝えれば、ご自身のポートフォリオとして公開することができます。
Rails アプリに変更を加えたら?
コミットして GitHub にプッシュすると、Render.com で自動的にデプロイが走ります。
デプロイ状況は、ダッシュボードの [Events] から状況が見られます。
デプロイ完了後、青いチェックマークがついていればOKです。
デプロイに失敗した場合は?
[Events] からデプロイ時のログを見られるので、確認してみましょう。
理由は多種多様なのでエラーメッセージを特定するしかありませんが、Google 検索したり、ChatGPT に聞くことで解決できるかもしれません。
デプロイは出来たけどアプリにエラーが出たら?
画面左側の [MONITOR] > [Logs] から、アプリのログを見てみましょう。
ターミナルで rails s
または bin/dev
コマンドでサーバを動かしていたときと同じように、ログが出てきます。
環境変数などに問題がなければ、エラーの原因はアプリケーションのコードにある可能性が高いです。
その場合は、ローカル(パソコン)上でエラーが再現するかどうかを確認し、原因を特定して修正しましょう。
Render.com と Neon での無料プランについて注意点
Render.com でデータベースまで作成すると、数ヶ月でデータベースを使えなくなってしまいます。
そのため、データベースは Neon で作成し、Render.com でアプリケーションをデプロイするという方法を採用しました。
しかし、Ruby on Rails を無料でデプロイする方法は頻繁に変わりうるため、その点にご留意いただけますと幸いです。
例えば、Render.com や Neon の無料プランが廃止されたり、仕様が変更されたりする可能性があります。
私も定期的に確認し、情報をアップデートできるよう努めます!!!