stack: Django/Docker/Postgresql
上个月,我对数据库模型进行了一些更改,并在 preprod 中进行了部署。
- remove fields
- add fields
- alter one field constraint
一切似乎都是正确的,应用了更改并且应用程序正在运行。
昨天,我做了一些小的更改并重新部署,但是当我重新构建项目时,检测到新的迁移。 这些迁移与上述完全相同。 迁移失败,因为尝试删除不再存在的字段。
姜戈应用更新过程:
- sudo docker-compose -f docker-compose.preprod.yml down -v
- git pull
- sudo docker-compose -f docker-compose.preprod.yml up -d --build --remove-orphans #<= error raise
- sudo docker-compose -f docker-compose.preprod.yml up
entrypoint.sh
#!/bin/sh
if [ "$DATABASE" = "postgres" ]
then
echo "Waiting for postgres..."
while ! nc -z $SQL_HOST $SQL_PORT; do
sleep 0.1
done
echo "PostgreSQL started"
fi
python manage.py makemigrations --noinput
python manage.py migrate
exec "$@"
您的入口点绝对不能包含makemigrations
。如果你一直在生产环境中运行它,你可能会被搞砸(即,你的生产数据库中会有其他地方找不到的迁移)。
makemigrations
只能在开发时运行,并且这些迁移必须提交到源代码管理。