背景デザイン画像1 背景デザイン画像2

Portfolio

AssertionError発生(Django)

MENU

 概要 

データベースにデータを登録しようとしたところ、AssertionErrorが発生。

スーパーユーザーが作成できていないようなので原因を調査していく。

 現状 

http://127.0.0.1:8000/admin/ にログイン



ログイン成功時の画面



TIMIZONE = UTC なのでエラーの原因がよく分からない



ユーザ一覧を表示したのだが空になっている。



しばらく調べていたら以下の記事を発見
Django 1.9.2 AssertionError:データベース接続がUTCに設定されていません

Djangoを用いてPostgreSQLに接続する場合はpsycopg2が必要なのだが、そのpsycopg2に原因がある模様。

 対策 

requirments.txt を以下のように変更



何故かwebサーバが起動しなくなってしまいピンチな件



最初から作り直した別のDjangoフォルダで試してみたところ、普通にログインできた。


docker images でコンテナに違いがないか確認したけど相違点はなかった。

が、admin.pyにデータベース名を記述したところで同じエラーが発生



ダメもとで以下を実行して外部からアクセスできるようにしてみる。
docker run --publish 8000:8000 othello_app_web


既に割り当てられててやりようないっぽいので次の策。

以下を実行してエラーメッセージを分析 (どこかでエラーになってるのは確実なのでログにあるはず)
docker logs --since 2023-03-12T21:15:00 othello_web_1


エラーの内容
  • サーバーがホストDB(172.28.0.2)で動作しているか

  • サーバーが5432番ポートのTCP/IP接続を許可しているか

ChatGPT に詳細な原因を聞いてみる。



こんな感じで答えてくれるので不明点をしつこく聞いていく。

質問
postgreSQLデータベースサーバーが実行されていることを確認するにはどうすればよいですか? 開発環境は「Docker」を使用していて、コンテナ内で「Django」を動かしています。

解答
Dockerを使用している場合は、まずDockerコンテナ内でpostgreSQLサーバーが実行されているかどうかを確認する必要があります。
1. Dockerコンテナを確認する
まず、Dockerコンテナが実行されていることを確認してください。以下のコマンドを実行することで、Dockerコンテナを確認できます。
docker ps
2. postgreSQLコンテナを確認する
Dockerコンテナが実行されている場合は、postgreSQLコンテナが起動しているかどうかを確認してください。以下のコマンドを使用して、postgreSQLコンテナを確認できます。
docker ps | grep postgres
このコマンドは、コンテナ名やID、ポートマッピングなどを含むpostgreSQLコンテナの詳細を表示します。
3. コンテナ内でpostgreSQLを確認する
postgreSQLコンテナが起動している場合は、コンテナ内でpostgreSQLが正しく実行されているかどうかを確認する必要があります。以下のコマンドを使用して、postgreSQLコンテナに接続できます。
docker exec -it postgres_container_name psql -U postgres_user
ここで、postgres_container_nameにはpostgreSQLコンテナの名前が、postgres_userにはpostgreSQLに接続するためのユーザー名が入ります。これにより、postgreSQLコンテナ内でpsqlコマンドを使用してpostgreSQLデータベースに接続できます。

しばらくやってみたけどこの方法では解決しなかった。

この感じだとデータベースを変更した方がいいかもしれないので次回からは別のデータベースで試してみる。