はじめに
アプリケーションの公開、運用を行うためのプラットフォームを提供するサービスである「Render」のデーターベースをリセットして、db/seeds.rb
を反映させる方法をまとめていきます。
この処理をした経緯
ancentry
というgemを用いてアプリケーションを実装していました。
データーベースで保存する情報をdb/seeds.rb
に直接入力したので、開発環境ではraills db:reset
を実行してデーターベースをリセットして、db/seeds.rb
を再読み込みさせました。
本番環境にもdb/seeds.rb
を読み込む必要があったため、この処理を実行しました。
この処理における注意点
今回使用するrails db:migrate:reset は主に開発環境で使用され、データベースを再構築するための手法です。
この方法を使用する場合は、慎重に検討し、データの喪失を避ける方法を確立する必要があります。
環境
ruby 3.2.0
Rails 7.0.8
実装の流れ
-
bin/render-build.sh
を編集する -
bin/render-build.sh
を編集する前にコードを戻す
1.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 # このコードをコメントアウトする
# 以下2行を追記する
DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:migrate:reset
bundle exec rake db:seed
上記のように編集し、Githubのmeinブランチからコミットプッシュをし、Renderのデプロイが完了次第、db/seed.rb
が反映されているか確認する。
追加されたコードを解説
DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:migrate:reset
bundle exec rake db:seed
1.DISABLE_DATABASE_ENVIRONMENT_CHECK=1
とは?
Rails5から導入された仕組みで、データベース環境チェックを無効にするための設定です。デフォルトでは、Railsはデータベース操作(例えばdb:dropやdb:resetなど)を本番環境で実行しようとするとエラーを返します。これは、本番環境でのデータベース操作は非常に危険であるため、ユーザーが誤ってデータベースを削除しないように保護するためのものです。
2.bundle exec rake db:migrate:reset
とは?
既存のデーターベースを削除して、新たにデーターベースを作成しマイグレーションファイルを実行します。以下のコマンドを実行しているのと同じ処理をします。
rake db:drop(データベースの削除)
rake db:create(データベースの作成)
rake db:migrate(マイグレーションファイルの実行)
3.bundle exec rake db:seed
とは?
このコマンドを実行すると、db/seeds.rb
を読み込み、その中のコードを実行します。これにより、db/seeds.rb
に定義されたデータがデータベースに保存されます。
2.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 #コメントアウトを外す
追記したコードを削除して、コメントアウトをはずし編集前にコードを戻します。その後再度meinブランチからコミットプッシュをし、Renderのデプロイが正常にいくか確認します。
以上で終わりです!
最後に
本番環境のデーターベースに関する作業は気を使いますが、以上の工程をすればしっかり実行することができました。
db/seeds.rb
に変更や追記された場合は、この手段を使う必要がありそうです。