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

时间:2017-04-01 15:24:16

标签: django django-migrations

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

1 个答案:

答案 0 :(得分:0)

没有。您不应该部署这些迁移。通常,您不应部署任何第三方迁移。

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

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

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

您应该部署的唯一内容是项目目录下的所有内容(INSTALLED_APPSrequirements.txtmanage.py等),而不是您的第三方应用,这些应用可能存在于您的项目中(可能在robots.txt目录下)或在项目之外的单独.virtualenv目录中。

与您的问题类似,对于nodejs来说是.virtualenvnode_modules目录永远不会部署到VCS(因为它可能会变得非常大)等,而只有node_modules,因为知道依赖项(package.json / package.json)您的项目需要,然后您的项目可以从零“重建”自己。