【问题标题】:Django migration non existent parent node after moving to production server移动到生产服务器后,Django迁移不存在的父节点
【发布时间】:2020-05-23 21:39:42
【问题描述】:

我正在尝试在 PythonAnywhere 上部署我的应用程序,当我去应用迁移时,我收到一个错误,指出迁移依赖项不存在。

我已经通过从迁移文件夹中删除迁移、删除数据库并重新创建它并运行 makemigrations 来完全重置迁移。

我现在只有一个初始迁移,一切都在我的本地机器上运行。

工作流程是这样的:

1 - 将我正在使用的当前版本克隆到 PythonAnywhere。 2 - 运行 ./manage migrate 来初始化数据库(第一次)并得到错误:

(rwe) 17:00 ~/rwe (develop)$ ./manage.py migrate
asyncio      DEBUG    Using selector: EpollSelector
Traceback (most recent call last):
  File "./manage.py", line 21, in <module>
    main()
  File "./manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/core/management/base.py", line 328, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/core/management/base.py", line 369, in execute
    output = self.handle(*args, **options)
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/core/management/base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/core/management/commands/migrate.py", line 86, in handle
    executor = MigrationExecutor(connection, self.migration_progress_callback)
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/db/migrations/executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/db/migrations/loader.py", line 49, in __init__
    self.build_graph()
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/db/migrations/loader.py", line 274, in build_graph
    raise exc
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/db/migrations/loader.py", line 248, in build_graph
    self.graph.validate_consistency()
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/db/migrations/graph.py", line 195, in validate_consistency
    [n.raise_error() for n in self.node_map.values() if isinstance(n, DummyNode)]
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/db/migrations/graph.py", line 195, in <listcomp>
    [n.raise_error() for n in self.node_map.values() if isinstance(n, DummyNode)]
  File "/home/IAMCB/.virtualenvs/rwe-Cn2YEGYr/lib/python3.7/site-packages/django/db/migrations/graph.py", line 58, in raise_error
    raise NodeNotFoundError(self.error_message, self.key, origin=self.origin)
django.db.migrations.exceptions.NodeNotFoundError: Migration backend.0001_initial dependencies reference nonexistent parent node ('auth', '0013_delete_users')
(rwe) 17:12 ~/rwe (develop)$

网站加载,我可以浏览等等。考虑到初始迁移尚未应用,我无法使用任何依赖数据库的东西。

系统之间唯一真正的变化是生产环境的密钥不同,并且 DEBUG=False

【问题讨论】:

  • 您的迁移显然缺少一些文件。也许auth/migrations/0013_delete_users.py 没有添加到存储库中。
  • 据我所知,'auth' 指的是我的设置文件中的 django.contrib.auth,我只有 2 个应用程序,它们都不是 'auth'
  • 是的,auth 指的是django.contrib.auth,它是您的 django 项目中的一个应用程序,只是它不是“你的”,因为它是 django 本身的一部分。您仍然需要为其生成迁移。
  • 好的,我的本地机器上的 django.contrib.auth 迁移到 0013,但是迁移只到 python 任何地方开发服务器上的 0011?!?我该如何解决这个问题,是否不应该使用版本控制来跟踪迁移?并运行 ./manage makemigration 会导致同样的错误。

标签: django django-migrations pythonanywhere


【解决方案1】:

我想通了。

我将 django 从 2.2.3 更新到 3.0.3,我缺少的迁移肯定是在我使用 2.2.3 期间产生的。

为我工作,但不适用于我的 PythonAnywhere 服务器。我已经在我的开发机器上重新创建了我的 virtualenv 并重置了我的所有迁移。现在一切都匹配了,没有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2017-10-26
    • 2016-05-22
    • 2016-10-18
    • 2018-03-23
    • 2013-04-17
    相关资源
    最近更新 更多