【发布时间】:2021-12-30 15:28:33
【问题描述】:
我对 Python 和 Django 还是很陌生,所以我有一种情况我不知道如何解决。
主要问题是,在将我的代码部署到 dev 时,部署失败,到 stage 或 prod,它通过了。
我处理了一个问题,即我必须在我们的应用程序的表中删除一些列。 进行更改后,我部署到 dev 并要求进行代码审查。 在代码审查中,建议我将迁移文件的名称更改为更具描述性的名称,而不是仅仅将其保留为 0018_auto_。
我进行了更改并部署到 dev 和 stage。开发失败(当我预计它会成功时)因为看到了新名称并且 django 试图删除不再存在的列。在阶段,名称从未更改,并且第一次使用该文件的新名称删除了列。
所以舞台部署得很好。
如何在 dev 上解决此错误,以便它识别此迁移已经发生?
谢谢!
【问题讨论】:
-
听起来迁移失败不是因为文件名更改了,而是因为您已经手动进行了迁移。您可以将列放回去,或者如果您确定您手动进行了正确的迁移,您可以 --fake 迁移,或者您可以手动将迁移输入到 django_migrations 表中,或者您可以注释掉迁移然后运行它...
-
感谢 Jimmy 的评论,我一直在阅读有关 —fake 的信息,但我仍然不知道如何使用它。您能否通过示例或带有代码示例的文章启发我?我认为这就是我所需要的。没错,我在 dev 上使用旧文件名进行了迁移,然后进行了更改。因此,它确实已经成功迁移到 dev 中。我想我可以阅读这些专栏,但我想先看看是否有更简单的方法。
-
如果第一次迁移在旧文件名下成功运行,那么您需要先撤消或修复它。您可以通过撤消迁移来撤消迁移docs.djangoproject.com/en/3.2/topics/migrations/…,或者您可以只更改存储在 django_migrations 表中的值
-
感谢您指出这一点。我明天试试反转。
-
所以你在第一条评论中给我的想法最终是我需要做的。在部署到 gitlab 时,我不知道如何使用 Django 和 Zappa 运行 --fake。我也访问了 AWS RDS,但没有办法编辑那里的表格(我不太精通 AWS)。最后,我编辑了我最新的迁移文件,而不是 RemoveField,我将它们全部添加回来并部署到 dev。之后,我再次编辑文件以删除以及更新模型和序列化器和 bam,现在看起来很棒!非常感谢!
标签: python django database deployment database-migration