「A server error occurred. Please contact the administrator.」の対処の流れ
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」にある状態です。
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:
調査の流れ
- docker-compose.ymlに
ports:
- "8001:8000"
と記載しているため、
http://127.0.0.1:8001/にアクセスしたところ、
「A server error occurred. Please contact the administrator.」
が発生した、という状況です。
- 「docker compose logs」コマンドでログを調査します。
「C:\Users\xxxx\OneDrive\ドキュメント\PythonProject\calendar_project\docker」に、
「docker-compose.yml」が存在するため、このフォルダーに移動してコマンドを実行します。
PS C:\Users\xxxx\OneDrive\ドキュメント\PythonProject\calendar_project> cd .\docker\
PS C:\Users\xxxx\OneDrive\ドキュメント\PythonProject\calendar_project\docker> docker compose logs
「docker compose ○○」のコマンドをどこで実行するのか、
というのは、こちらの記事にまとめています。
- 「docker compose logs」で表示されたログの中に、以下のような記載がありました。
AttributeError: 'Settings' object has no attribute 'ROOT_URLCONF'
これは、「settings.pyにROOT_URLCONFの設定がありませんよ」
というエラーということで、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/」にアクセスすると、
正常に、起動するのを確認することができました。
まとめ
こちらでまとめたように、
django-admin startproject xxxx .
でsettings.pyが自動で作られたときは、
ROOT_URLCONFの設定を意識していませんでしたが、
一からDjangoプロジェクトを作成したことで、
今回のエラーにぶち当たりました。
今回の情報が誰かの役に立てば幸いです。
Discussion