【Rails/Render】本番環境でのマイグレーション

先日、テックキャンプの最終課題である、「furimaアプリ」の実装を終了しました。

Renderを使用してデプロイする際に、エラーがでてしまったことについてまとめようと思います。

事例

本番環境へのデプロイをしようとしていたところで、500エラー。

ログを見てみると「ニックネームがありません」とのこと。

Userのマイグレーションファイルを触る際は、
ロールバックしてから変更し、その後マイグレーションも実施。
ローカルでは問題なく動いている。

本番環境のDBを見ると、Userテーブルにemailとpasswordしかない。。。!

本番環境でもマイグレーションファイルを実行する必要があったようです。

実施したこと

bin/render-build.sh

# bundle exec rake db:migrate   削除
DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:migrate:reset   追加

DISABLE_DATABASE_ENVIRONMENT_CHECK=1

本番環境のデータベースを削除するために必要な設定。
本番用のデータベースには重要なデータが含まれるため、通常は削除できないようになっている。

今回はリセットを行いため、明示的に削除を許可する設定を記述。

bundle exec rake db:migrate:reset

データベースをリセットするためのコマンド。

つまり、

rake db:drop(データベースの削除)

rake db:create(データベースの作成)

rake db:migrate(マイグレーションファイルの実行)

の順に実行したのと同じ動作をする。

これで、本番環境のDBも最新の状態になり、エラー解消できました。

このままだと、デプロイを行うごとに必ずデータベースがリセットされるので、
設定ファイルを元に戻しました。

bundle exec rake db:migrate   追加
DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:migrate:reset   削除

まとめ

ローカルで自分一人で実装し、ユーザーもいない場合、
マイグレーションファイルの変更を行ってもダメージは少なめではありますが。。。
たくさんの人で開発をしていたり、本番環境ですでにたくさんのユーザーがいたりする場合は追跡がとても大変になるなと思いました。
本番環境にマイグレーションするときは慎重に行いたいです!