【发布时间】:2017-07-01 06:43:20
【问题描述】:
我的开发服务器上有一个工作站点和数据库,我正在尝试在实时服务器上进行设置。我正在执行以下操作:
- Git 将存储库从开发服务器克隆到实时服务器
- 在实时服务器 (Posgres) 上创建空数据库
- 在实时服务器上更新 settings.py 以获取所有相关数据库等设置
- 删除所有迁移文件/文件夹并删除所有 *.pyc 文件
- python manage.py makemigrations
我收到错误:django.db.utils.ProgrammingError: relation "myapp_mytable" does not exist。
我似乎无法进行初始迁移。我找到的唯一解决方案是进入我的settings.py 文件并注释掉我在INSTALLED_APPS 中的所有应用程序,然后进入我的主urls.py 文件并注释掉我所有的网址。
注释掉这些部分后,我可以进行初始迁移。之后我可以取消注释我的应用程序并开始一个一个地迁移它们,即:python manage.py makemigrations appname 然后python manage.py migrate
所以我有一个解决方法,但它远非理想。当然有一种方法可以告诉 django 我已经创建了一个全新的空数据库,所以它需要先进行初始迁移。我正在使用 Ansible 自动设置服务器,因此要求我执行所有这些手动注释/取消注释和多次迁移并不好。
更新:
根据 cmets,我不认为要删除迁移。因此,我在开发服务器上执行了以下操作来尝试重新创建它们:link。但是,即使我现在有已复制到实时服务器的迁移文件,当我尝试运行它们时,我也会收到与上述相同的错误。
我已通读迁移文件,但没有看到任何提及创建初始迁移/数据库架构的内容。它只提到创建我的应用模型。在完成应用程序迁移之前,我似乎无法弄清楚如何进行初始迁移。我需要以某种方式从头开始重新创建所有迁移文件(包括创建初始数据库架构),以便它们可以在服务器上运行。
【问题讨论】:
-
为什么你会删除所有的迁移文件?重点不是这样做,而是运行您已经创建的那些。
-
好吧,我显然误解了如何去做。我的印象是我需要在新服务器上运行 makemigrations 以便 django 看到它是一个空数据库并创建新数据库。显然我误解了。不知道为什么一个完全有效的问题应该被否决。那问一个问题有什么意义。原始问题已更新。
-
由于您的代码在 git 中,您应该将状态重置为迁移所在的位置,而不是重新创建它们。而且我不确定“如何在应用程序迁移之前进行初始迁移”是什么意思 - 没有单独的“初始迁移”。
-
我所说的“初始迁移”是因为即使我现在使用正确的迁移文件运行 manage.py migrate,我仍然会收到相同的错误,说关系不存在。数据库是空的,所以当然关系还不存在。我不确定为什么 django 没有创建所有必需的模型。
-
您似乎在某处进行了导入,导致在进程启动时进行数据库查询。您应该发布完整的回溯以帮助追查问题。
标签: python django postgresql