🎉

「A server error occurred. Please contact the administrator.」の対処の流れ

2025/01/21に公開
 django-admin startproject xxxx .

を使わずにDjangoプロジェクトを初めて構築しようとしたところ、
「A server error occurred. Please contact the administrator.」
というエラーが起きたので、その対処の流れをまとめました。

条件

前提

WindowsでVS Codeで『Dev Containers』機能を使用し、
Dockerコンテナ内にDjangoプロジェクトを構築した状態

開発コンテナーのフォルダー構成

コンテナー側

ローカル

上記のプロジェクトは
「C:\Users\xxxx\OneDrive\ドキュメント\PythonProject」にある状態です。

docker-compose.yml
services:
  web:
    build:
      context: ..
      dockerfile: docker/Dockerfile
    ports:
      - "8001:8000"
    volumes:
      - ../backend:/app
    command: python manage.py runserver 0.0.0.0:8000
    depends_on:
      - db
  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=calendar_db
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data/
      
volumes:
  postgres_data:

調査の流れ

  1. docker-compose.ymlに
docker-compose.yml
    ports:
      - "8001:8000"

と記載しているため、

http://127.0.0.1:8001/にアクセスしたところ、
「A server error occurred. Please contact the administrator.」
が発生した、という状況です。

  1. 「docker compose logs」コマンドでログを調査します。
    「C:\Users\xxxx\OneDrive\ドキュメント\PythonProject\calendar_project\docker」に、
    「docker-compose.yml」が存在するため、このフォルダーに移動してコマンドを実行します。
VS Codeのターミナル
PS C:\Users\xxxx\OneDrive\ドキュメント\PythonProject\calendar_project> cd .\docker\
PS C:\Users\xxxx\OneDrive\ドキュメント\PythonProject\calendar_project\docker> docker compose logs

「docker compose ○○」のコマンドをどこで実行するのか、
というのは、こちらの記事にまとめています。
https://zenn.dev/40_comeback_eng/articles/319cc09784c54e

  1. 「docker compose logs」で表示されたログの中に、以下のような記載がありました。
AttributeError: 'Settings' object has no attribute 'ROOT_URLCONF'

これは、「settings.pyにROOT_URLCONFの設定がありませんよ」
というエラーということで、settings.pyに

settings.py
ROOT_URLCONF = xxxx

という記述を追記します。

ここで、「xxxx」という部分は、
プロジェクトのURLパターンを定義している
Pythonモジュールのパスを指定し、
今回の場合は「'config.urls'」をしています。

具体的には、

backend/
├── config/          # Djangoプロジェクトの設定ディレクトリ
│   ├── __init__.py
│   ├── settings.py  # この中でROOT_URLCONFを設定
│   ├── urls.py      # ← これを指している
│   └── wsgi.py
└── manage.py

というフォルダ構成になっているため、
'config.urls' という指定は:

config : configディレクトリ(Pythonパッケージ)
urls : その中のurls.pyファイル
. : Pythonのモジュールパス区切り

を表しています。
つまり、ROOT_URLCONF = 'config.urls' は
「URLのルーティング設定は config/urls.py に書いてあります」
という意味になります。

ROOT_URLCONF = 'config.urls'をsettings.py設定し、
再度「http://127.0.0.1:8001/」にアクセスすると、
正常に、起動するのを確認することができました。

まとめ

こちらでまとめたように、
https://zenn.dev/40_comeback_eng/articles/29c306f656babe

 django-admin startproject xxxx .

でsettings.pyが自動で作られたときは、
ROOT_URLCONFの設定を意識していませんでしたが、
一からDjangoプロジェクトを作成したことで、
今回のエラーにぶち当たりました。

今回の情報が誰かの役に立てば幸いです。

Discussion