【问题标题】:migration not working with django and docker?迁移不适用于 django 和 docker?
【发布时间】: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


【解决方案1】:

我认为您不需要手动添加模型。查看您的 bash 脚本,您似乎在 migrate 行之前缺少 python manage.py makemigrations 行。我遇到了同样的问题,我通过添加该行作为回答 here 来修复它。这个问题已经四个月了,希望将来有人能得到帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2013-06-22
    • 2021-06-11
    • 2016-11-14
    相关资源
    最近更新 更多