【发布时间】:2021-08-29 23:29:43
【问题描述】:
我有一个项目,我在其中开发了一个 Django 应用程序,我试图将它容器化并托管在我的树莓派上。在我的本地环境中开发期间,容器工作正常(构建和运行没有任何错误)。但是,当我尝试在我的服务器上运行它时,迁移将无法正常工作。由于某些奇怪的原因,它在迁移期间不包括我的自定义用户模型。 file structure 遵循基本模式,其中一个文件夹用于应用程序,另一个文件夹包含网络服务器 (nginx)。 Django-compiler 创建三个图像(postgres、django、nginx)。与容器相关的主要逻辑可以在主Dockerfile 中找到。为了运行迁移并启动 django 应用程序,我包含了一个迁移所有模型的bash script。但是,在构建过程中出现以下错误:
app_1 | False
app_1 | Operations to perform:
app_1 | Apply all migrations: admin, auth, contenttypes, sessions, token_blacklist
app_1 | Running migrations:
db_1 | 2021-06-14 00:36:00.879 UTC [35] ERROR: relation "users_newuser" does not exist
db_1 | 2021-06-14 00:36:00.879 UTC [35] STATEMENT: ALTER TABLE "django_admin_log" ADD CONSTRAINT "django_admin_log_user_id_c564eba6_fk_users_newuser_id" FOREIGN KEY ("user_id") REFERENCES "users_newuser" ("id") DEFERRABLE INITIALLY DEFERRED
app_1 | Applying admin.0001_initial...Traceback (most recent call last):
app_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
app_1 | return self.cursor.execute(sql, params)
app_1 | psycopg2.errors.UndefinedTable: relation "users_newuser" does not exist
关于 Django 应用程序,我在每个 admin.py 文件中添加了每个模型,并通过扩展 INSTALLED_APPS 和 AUTH_USER_MODEL 修改了设置。由于错误消息表明我的迁移文件似乎有问题。因此我删除了这些迁移文件无济于事,错误仍然存在。
感谢任何建议,因为我已经用尽了我自己能想到的所有可能的解决方案。
【问题讨论】:
-
根据报错信息,我想你的迁移文件有问题。您应该考虑删除所有迁移文件并再次进行迁移(您可能会丢失所有数据)
-
首先感谢您的回复。但是,这些文件不包含任何迁移文件,我已经删除了它们,因为我想确保这不是问题。但是,问题仍然存在。但是,可能是映像未完全删除并包含迁移文件。但是,很难对此进行测试,因为如果终端未运行,我将无法连接到终端。但是,我执行删除容器的命令是: 1. docker-compose stop 2. docker-compose rm 3. docker-compose down 4 docker volume rm 5 docker system prune --all
-
错误发生在 docker run python manage.py migrate 时,所以我猜你的 Django 迁移文件会因为工作时更改模型而搞砸了。您可以按照本指南重置迁移simpleisbetterthancomplex.com/tutorial/2016/07/26/…
-
还有另一种方法可以测试您的迁移文件是否混乱。 git 将此 repo 克隆到一个新文件夹,然后从那里(在本地)运行 docker-compose up。
-
我能够通过手动添加缺失的模型然后运行迁移来解决问题。我不知道为什么这个解决方案会出现问题。如果有人知道请告诉我:)
标签: django postgresql docker nginx