今天我的同事建议删除迁移文件以便再次创建它们。当我执行此操作时,我看到应用程序的迁移文件夹中只有 init.py 同时,之前执行了数据库所需的操作(特别是为模型创建附加表)。
我在这个项目上工作了大约一周,并且不止一次执行了下面的命令,当然!但从未见过迁移文件夹中没有存储任何文件。
这是我运行 makemigrations 的命令:
docker-compose exec web python manage.py makemigrations
这是执行迁移的命令:
docker-compose exec web python manage.py migrate --noinput
这是我的 docker-compose.yml:
version: '3'
services:
web:
build:
context: .
dockerfile: Dockerfile
restart: always
volumes:
- ./static/:/app/static/
- ./media/:/app/media/
command: >
sh -c "gunicorn conf.wsgi:application --bind 0:8000"
depends_on:
- db
ports:
- "8000:8000"
env_file:
- .env
environment:
- DEBUG=True
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
db:
image: postgres:latest
environment:
POSTGRES_DB: $DB_NAME
POSTGRES_USER: $DB_USER
POSTGRES_PASSWORD: $DB_PASS
pgadmin:
container_name: pgadmin
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: [email protected]
PGADMIN_DEFAULT_PASSWORD: postgres
ports:
- "5050:80"
volumes:
postgres_data:
static_volume:
ssl_volume:
我尝试重新启动容器,docker。 有时也重新启动 IDE (PyCharm)。
理想情况下,您将迁移文件存储在 github 存储库中。如果您犯了错误并忘记更新本地数据库,会发生什么情况?此外,迁移文件将在每次部署后删除,因为它未安装到卷。如果您在某个地方犯了错误,这将不允许您恢复到之前的迁移。
经验法则是将迁移文件放在 github 存储库中,并且在您的服务器上仅运行
python manage.py migrate
以确保您的本地环境尽可能匹配您的生产。