2011-07-12 29 views
1

我有一个使用南包含安装脚本的Django项目。我想要做的是在该安装脚本中有几行代码,负责安装和同步我的数据库与我的最新代码,以便项目的新安装可以轻松地设置它们的数据库。如何在安装脚本中自动化南迁移

我可以运行...

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

...但我不能将它放入安装脚本,因为:(1)我不知道提前迁移数量,以及(2)我宁愿不必将安装脚本与应用程序名称保持一致。有

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

就是因为这个一招:

我需要的是一样的东西?

+0

Seconding @ John的问题,你为什么要用'--fake'来部署?无论如何,无论如何,'migrate'或'migrate appname'只会运行所有应用程序/指定应用程序的所有未应用迁移。 '--fake'同样的东西# –

+0

@beres,请参阅我对@John的回应,下面。 – mlissner

回答

3

一般而言,在部署期间不应使用--fake。假的意思是它并不实际运行迁移,如果你的用例说你总是要使用--fake(因为你正在做手动迁移),那么为什么你很难试图让它们进入你的部署脚本在所有。

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

+0

这是针对新安装的,因此我认为运行syncdb会将最新的模型放入数据库中,否定迁移的需要。在那之后,是的,我确实想迁移,但是如果一个新用户正在安装这个软件,并且它有十几个迁移,他们就不应该运行它们,对吧? – mlissner

+0

实际上他们不应该(一般)。假设新用户检出您的存储库。一旦他们得到它,南已经安装,你的应用程序已经在迁移控制之下,所以syncdb将不会对这些应用程序做任何事情,并且运行迁移(从0001_initial)实际上会创建整个数据库 – John

+0

若要添加一点为什么某些应用程序将会违反该规定。随着时间的推移,应用程序将开发潜在的数百次迁移。有时这些可能需要很长时间才能运行,或者由于依赖性不好而导致从头开始运行。有时在这些情况下,让新的安装说明(或脚本)禁用south并使用syncdb会更容易,然后启用south并 - 创建所有迁移。这是例外而非规则。 – John