当我们将Django应用程序部署到Heroku时,它会说“尚未在迁移中反映的更改”,但也会说它没有要进行的迁移

dy1byipe  于 2022-12-13  发布在  Go
关注(0)|答案(1)|浏览(129)

我的本地回购是最新的与我的Heroku回购。
当我在本地运行makemigrationsmigrate时,它说没有变化。
当我在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.

这会导致我们的整个网络应用程序瘫痪。怎么回事?

ldioqlga

ldioqlga1#

当我在Heroku上运行makemigrations时,无论我运行多少次,每次都执行完全相同的更改
有道理。
当你执行heroku run命令时,Heroku会启动一个one-off dyno来运行命令,这个dyno有自己的临时文件系统,不会与其他dyno共享。
因此,每次运行该命令时,它都会生成新的迁移文件,并将其保存在本地,然后在dyno停止运行时立即将其丢弃。再次运行该命令将为您提供一个新的一次性dyno,其中包含新的文件系统。
永远不要在Heroku上运行makemigrations。你应该只在本地运行。
当我在本地运行makemigrationsmigrate时,系统显示没有更改
您可能有最新的迁移文件(因此没有生成文件),但这些文件尚未提交(因此Heroku无法看到它们),或者您正在从一个未提交这些文件的分支进行部署。
确保迁移文件已在本地正确提交,然后重新部署。

相关问题