先日、テックキャンプの最終課題である、「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 削除
まとめ
ローカルで自分一人で実装し、ユーザーもいない場合、
マイグレーションファイルの変更を行ってもダメージは少なめではありますが。。。
たくさんの人で開発をしていたり、本番環境ですでにたくさんのユーザーがいたりする場合は追跡がとても大変になるなと思いました。
本番環境にマイグレーションするときは慎重に行いたいです!