我应该如何处理插件创建的迁移?
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.txt
、django-admin createproject myproject
然后 ./manage.py migrate
时,您的数据库将 "filled" 包含所有内置的 Django 特定表(即 auth
、sessions
、contenttypes
等)并在 INSTALLED_APPS
设置列表中启用。
您唯一应该部署的是您的项目目录下的所有内容(requirements.txt
、manage.py
、robots.txt
等),而不是您的第 3 方应用程序,它们可能位于其中您的项目(可能在 .virtualenv
目录下)或在项目之外的单独 .virtualenv
目录中。
与您的问题类似的是 node_modules
for nodejs。 node_modules
目录永远不会部署到 VCS(因为它的大小可能会变得非常大等),而只有 package.json
是,因为知道依赖项 (package.json
/requirements.txt
)你的项目需要,那么你的项目就可以"reconstruct"自己从零开始。
我像往常一样将 <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.txt
、django-admin createproject myproject
然后 ./manage.py migrate
时,您的数据库将 "filled" 包含所有内置的 Django 特定表(即 auth
、sessions
、contenttypes
等)并在 INSTALLED_APPS
设置列表中启用。
您唯一应该部署的是您的项目目录下的所有内容(requirements.txt
、manage.py
、robots.txt
等),而不是您的第 3 方应用程序,它们可能位于其中您的项目(可能在 .virtualenv
目录下)或在项目之外的单独 .virtualenv
目录中。
与您的问题类似的是 node_modules
for nodejs。 node_modules
目录永远不会部署到 VCS(因为它的大小可能会变得非常大等),而只有 package.json
是,因为知道依赖项 (package.json
/requirements.txt
)你的项目需要,那么你的项目就可以"reconstruct"自己从零开始。