我像往常一样将<project>/<app>/migrations
文件夹添加到版本控制中进行部署。最近我也在使用django-auditlog,它在<project>/env/Lib/site-packages/auditlog/migrations
中创建了自己的迁移。这些迁移就像我自己的迁移一样。所以我想知道:我是否应该将它们添加到VCS并部署它们?
答案 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.txt
,django-admin createproject myproject
和./manage.py migrate
时,您的数据库将“填充”所有内置的Django特定表(即{ {1}},auth
,sessions
等)并在contenttypes
设置列表中启用。
您应该部署的唯一内容是项目目录下的所有内容(INSTALLED_APPS
,requirements.txt
,manage.py
等),而不是您的第三方应用,这些应用可能存在于您的项目中(可能在robots.txt
目录下)或在项目之外的单独.virtualenv
目录中。
与您的问题类似,对于nodejs来说是.virtualenv
。 node_modules
目录永远不会部署到VCS(因为它可能会变得非常大)等,而只有node_modules
,因为知道依赖项(package.json
/ package.json
)您的项目需要,然后您的项目可以从零“重建”自己。