はじめに
バックエンドエンジニアを目指してPython等を勉強中の初心者です。
Qiitaは初投稿となります。
今回、作成したDjangoアプリをAWS EC2にデプロイする過程でタイトルのエラーが発生しました。原因が中々わからず苦労したので、解決方法を書き残しておきます。
環境
- Amazon Linux 2(64bit)
- Apache2.4.43
- MySQL8.0.21
- Python3.7.8
- Django3.1
エラー内容
ApacheやMySQLの設定を終え、Djangoのmigraion
を実行した後、ブラウザからEC2のパブリックIPアドレスにアクセスすると次のようなエラーが表示されました。
Django.db.utils.ProgrammingError: (1146, "Table '<テーブル名>' doesn't exist")
文字通りテーブルが存在しないよーというエラーです。
ローカルでSQLite3を使っていたときはうまくいっていたので、サーバ内のMySQLの設定がおかしいのかと思い色々いじってみたがうまく行かず…
そこでDjangoのアプリ構成をもう一度よく見返してみると、作成されているはずのmigrationファイルが存在しないことに気づきました。migrationがうまく行われていないようです。
原因と解決法
今回デプロイしたDjangoプロジェクトは1プロジェクトの下に2つアプリという構成でした。
その場合はどうやらpython3 manage.py makemigraions <アプリ名>
のようにアプリ名を指定しないと、正しくmigrationが実行されないことがあるようです。
そこで今度は
python3 manage.py makemigraions <アプリ名>
python3 manage.py migrate
と実行したところ、テーブルが作成され、上記のエラーが解消しました。
同じような事象に悩まされている方はぜひ試してみてください。
参考
[django model を作成したが、makemigrations で No changes detected になる| Monotalk]
(https://www.monotalk.xyz/blog/django-model-%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E3%81%8Cmakemigrations-%E3%81%A7-no-changes-detected-%E3%81%AB%E3%81%AA%E3%82%8B/)