我应该如何处理插件创建的迁移?

What should I do with plugin-created migrations?

我像往常一样将 <project>/<app>/migrations 文件夹添加到版本控制以进行部署。最近我也在使用 django-auditlog,它在 <project>/env/Lib/site-packages/auditlog/migrations 中创建自己的迁移。这些迁移就像我自己的一样应用。所以我想知道:我是否也应该将它们添加到 VCS 并部署它们?

没有。您不应该部署这些迁移。一般来说,您不应部署任何第三方迁移。

原因很简单。第三方软件包在其 migrations 目录中进行初始迁移。每次您创建依赖于第三方包的迁移时,此迁移将存在于您应用的 migrations 目录中(不在包一内)。

因此,当您首次部署代码并 运行 pip install -r requirements.txt 在您的服务器上时,将安装所有第 3 方包,当您执行 ./manage.py migrate 时,Django 将查看您的 INSTALLED_APPS 并为此列表中的每个执行所有迁移。

任何第三方包都会发生同样的事情,就像 Django 本身一样。假设您的 requirements.txt 文件中只有 Django==1.10.6。当您将其部署到服务器并执行 pip install -r requirements.txtdjango-admin createproject myproject 然后 ./manage.py migrate 时,您的数据库将 "filled" 包含所有内置的 Django 特定表(即 authsessionscontenttypes 等)并在 INSTALLED_APPS 设置列表中启用。

您唯一应该部署的是您的项目目录下的所有内容(requirements.txtmanage.pyrobots.txt 等),而不是您的第 3 方应用程序,它们可能位于其中您的项目(可能在 .virtualenv 目录下)或在项目之外的单独 .virtualenv 目录中。

与您的问题类似的是 node_modules for nodejs。 node_modules 目录永远不会部署到 VCS(因为它的大小可能会变得非常大等),而只有 package.json 是,因为知道依赖项 (package.json/requirements.txt)你的项目需要,那么你的项目就可以"reconstruct"自己从零开始。