我将South添加到有许多安装的现有应用程序中,但由于安全原因,我无法访问生产环境。
我们只能提供Python安装脚本,这些脚本将由通常不具备任何有关Django,South等知识的人员运行。Django South:检测生产中是否应用了伪迁移
我知道,对于现有安装,任何未来升级都必须开始执行:
manage.py syncdb
manage.py migrate --all 0001 --fake
任何新安装都将开始:
manage.py syncdb
manage.py migrate -all
有什么办法,如果已经应用于南初始迁移检测(例如,通过检测是否存在south_migfationhistory表)以数据库不可知的方式(可能与Django本身)?
我想要做的是:
(pseudocode)
db = database.connect(dbname, user, password)
if db.table_existst('south_migrationhistory'):
execute 'manage.py syncdb'
execute 'manage.py migrate --all'
else:
execute 'manage.py syncdb'
execute 'manage.py migrate --all 0001 --fake'
execute 'manage.py migrate --all'
首先,始终运行--fake将打破..非常快。当您知道数据库已同步到特定迁移时,虚拟应只运行一次。所有未来的更新应该是一个简单的迁移。 是的,您应该通过'settings.INSTALLED_APPS'查询'south.models.MigrationHistory'来执行任何自定义逻辑。 –
@Yuji是的,我的意思是在升级已有一些表格但尚未具备South的现有安装时,只应用一次'迁移 - 全部0001 - 构建'。在第一次升级之后,所有以下升级应该只能'迁移 - 全部'。这在我的伪代码示例中更具说明性。 – matf