我的本地回购是最新的与我的Heroku回购。
当我在本地运行makemigrations
或migrate
时,它说没有变化。
当我在Heroku上运行makemigrations
时,无论我运行多少次,它每次都执行完全相同的更改:
python manage.py makemigrations users kits email
Migrations for 'kits':
apps/kits/migrations/0002_auto_20221209_1204.py
- Change Meta options on historicalkit
- Alter field history_date on historicalkit
Migrations for 'users':
apps/users/migrations/0002_auto_20221209_1204.py
- Change Meta options on historicaluser
- Alter field history_date on historicaluser
...但是如果我在Heroku上运行migrate
,它会说没有要迁移的内容,并且有未执行的迁移:
python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, email, kits, sessions, users
Running migrations:
No migrations to apply.
Your models in app(s): 'kits', 'users' have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
这会导致我们的整个网络应用程序瘫痪。怎么回事?
1条答案
按热度按时间ldioqlga1#
当我在Heroku上运行
makemigrations
时,无论我运行多少次,每次都执行完全相同的更改有道理。
当你执行
heroku run
命令时,Heroku会启动一个one-off dyno来运行命令,这个dyno有自己的临时文件系统,不会与其他dyno共享。因此,每次运行该命令时,它都会生成新的迁移文件,并将其保存在本地,然后在dyno停止运行时立即将其丢弃。再次运行该命令将为您提供一个新的一次性dyno,其中包含新的文件系统。
永远不要在Heroku上运行
makemigrations
。你应该只在本地运行。当我在本地运行
makemigrations
或migrate
时,系统显示没有更改您可能有最新的迁移文件(因此没有生成文件),但这些文件尚未提交(因此Heroku无法看到它们),或者您正在从一个未提交这些文件的分支进行部署。
确保迁移文件已在本地正确提交,然后重新部署。