LoginSignup
1
0

【Render】本番環境のデーターベースをリセットし、seeds.rbを反映させる

Posted at

はじめに

アプリケーションの公開、運用を行うためのプラットフォームを提供するサービスである「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

実装の流れ

  1. bin/render-build.shを編集する
  2. bin/render-build.shを編集する前にコードを戻す

1.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         # このコードをコメントアウトする

# 以下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など)を本番環境で実行しようとするとエラーを返します。これは、本番環境でのデータベース操作は非常に危険であるため、ユーザーが誤ってデータベースを削除しないように保護するためのものです。

【参考にさせていただいた記事】
https://y-yagi.tumblr.com/post/142064773890/rails-5%E3%81%AB%E5%85%A5%E3%81%A3%E3%81%9Fdb%E7%A0%B4%E5%A3%8A%E7%B3%BBtask%E3%81%AE%E9%98%B2%E6%AD%A2%E5%87%A6%E7%90%86%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

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を編集する前にコードを戻す

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に変更や追記された場合は、この手段を使う必要がありそうです。

1
0
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
1
0