【问题标题】:How to automate south migrations in an install script如何在安装脚本中自动化南迁移
【发布时间】:2011-07-12 06:55:26
【问题描述】:

我有一个使用 South 的 Django 项目,其中包含一个安装脚本。我想做的是在该安装脚本中有几行代码,负责安装我的数据库并将其与我的最新代码同步,以便项目的新安装可以轻松设置其数据库。

我可以跑...

python manage.py migrate --fake 0010 appname1
python manage.py migrate --fake 0004 appname2

...但我无法将其放入安装脚本中,因为 (1) 我不知道迁移编号,以及 (2) 我不想让安装脚本保持最新与应用名称。

我需要的是这样的:

python manage.py migrate --fake --allmigrations --allapps

这有什么诀窍吗?

【问题讨论】:

  • 第二个@John 的问题,你为什么使用--fake 进行部署?无论如何,不​​管怎样,migratemigrate appname 只会为所有应用程序/指定应用程序运行所有未应用的迁移。与--fake 相同
  • @Beres,请参阅下面我对@John 的回复。

标签: django installation data-migration django-south


【解决方案1】:

一般来说,您不应该在部署期间使用 --fake。假的意味着它实际上并没有运行迁移,如果您的用例说您总是要使用 --fake (因为您正在手动进行迁移),那么您为什么还要费心尝试将它们放入您的部署脚本完全没有。

就是这么说的。如果您确实打算使用您的部署脚本运行迁移,那么这相对简单。只需运行 manage.py migrate。没有应用名称,也没有迁移编号。您甚至可以执行 manage.py migrate --fake ,它会伪造迁移所有应用程序的所有迁移。如果你这样做,真正的问题是你为什么要打扰。

【讨论】:

  • 这是针对新安装的,所以我认为运行 syncdb 会将最新模型放入数据库,从而无需迁移。在那之后,是的,我确实想迁移,但如果新用户正在安装该软件,并且它带有十几个迁移,他们不应该运行它们,对吧?
  • 实际上他们应该(通常)不。假设新用户签出您的存储库。一旦他们得到它,South 就已经安装并且您的应用程序已经在迁移控制之下,因此 syncdb 不会对这些应用程序执行任何操作,并且运行迁移(从 0001_initial 开始)实际上会创建整个数据库
  • 补充一点为什么有些应用会对该规则做出例外。随着时间的推移,一个应用程序可能会进行数百次迁移。有时这些可能需要很长时间才能运行,甚至由于定义不明确的依赖关系而从头开始运行时出现问题。有时在这些情况下,让新的安装说明(或脚本)更容易禁用 south 并使用 syncdb,然后启用 south 并 --fake 所有迁移。这是例外而不是规则。
  • 这澄清了。所以 South 的 syncdb 会识别出它是一个新的安装,会设置在应用程序上使用 South 之前存在的模式,然后会向前迁移?在那种情况下,我一定对早期迁移有什么误解。
  • 在“新”安装中不存在架构。如果架构已经存在,则它不是新安装,您需要 --fake 迁移直到架构与迁移匹配。如果它真的是一个新的安装,南将从头创建完整的架构。但是,在这种情况下,最常见的问题之一是您实际上没有测试从头开始创建架构并且没有正确设置依赖项:south.aeracode.org/docs/…
猜你喜欢
  • 2015-02-17
  • 2012-12-28
  • 2018-12-27
  • 2023-01-15
  • 1970-01-01
  • 2014-05-12
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多