October 2025
Intermediate to advanced
712 pages
9h 46m
Japanese
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
取り組んでいる課題の山からいくつか層を剥がしてみると: 便利な待機ヘルパーがある。あれは何に使っていたんだっけ? ああそうだ、ログイン待ちに使っていた。なぜだったか? ああそうだ、ユーザを事前認証する仕組みを構築したばかりだった。 Dockerとステージングサーバでそれがどう動くか見てみよう。
第18章のデプロイチェックリストを覚えているか? 今日こそその真価を発揮する時だ!
まず、ローカルでDockerコンテナを再構築して起動する。
ポート8888 で:
$ docker build -t superlists . && docker run \
-p 8888:8888 \
--mount type=bind,source="$PWD/container.db.sqlite3",target=/home/nonroot/db.sqlite3 \
-e DJANGO_SECRET_KEY=sekrit \
-e DJANGO_ALLOWED_HOST=localhost \
-e DJANGO_DB_PATH=/home/nonroot/db.sqlite3 \
-it superlists
[...]
=> => naming to docker.io/library/superlists [...]
[2025-01-27 22:37:02 +0000] [7] [INFO] Starting gunicorn 22.0.0
[2025-01-27 22:37:02 +0000] [7] [INFO] Listening at: http://0.0.0.0:8888 (7)
[2025-01-27 22:37:02 +0000] [7] [INFO] Using worker: sync
[2025-01-27 22:37:02 +0000] [8] [INFO] Booting worker with pid: 8
bind source path does not exist というエラーが表示された場合、
何らかの理由でコンテナデータベースが失われている。
touch container.db.sqlite3 で新しいデータベースを作成せよ。
次に、コンテナ内でmigrate を実行し、
コンテナ内のデータベースが完全に最新であることを確認する:
$ docker exec $(docker ps --filter=ancestor=superlists -q) python manage.py migrate Operations to perform: Apply all migrations: accounts, auth, contenttypes, lists, sessions Running migrations: [...]
この$(docker ps --filter=ancestor=superlists -q)という小さなコマンドは、
コンテナIDを手動で検索する手間を省く便利な方法だ。
代替手段としては、docker run コマンド内で--name を使ってコンテナ名を明示的にセットする方法もある。
さて、FTを実行してみよう:
$ TEST_SERVER=localhost:8888 ...
Read now
Unlock full access