如何忽略生产中的一些迁移

Posted

技术标签:

【中文标题】如何忽略生产中的一些迁移【英文标题】:How to ignore some migrations in production 【发布时间】:2019-11-06 10:09:36 【问题描述】:

错误地,现在生产中存在不一致,当我在本地使用空数据库运行时,我的本地 Django 迁移和 makemigrations 命令将生成正确的迁移。例如,此迁移将生成:

class Migration(migrations.Migration):

    dependencies = [
        ('campaign', '0208_auto_20190619_0929'),
    ]

    operations = [
        migrations.RemoveField(
            model_name='bannerad',
            name='average_price',
        ),
        migrations.RemoveField(
            model_name='bannerad',
            name='click',
        ),
        .... blah
        migrations.AlterField(
            model_name='bannerad',
            name='size',
            field=models.IntegerField(choices=[(0, '120x240'), (1, '120x600'), (2, '970x250'), (3, '160x600'), (4, '240x240'), (5, '300x100'), (6, '300x250'), (7, '468x60'), (8, '600x300'), (9, '728x90')]),
        ),
    ]

但在生产中运行生成的迁移已经迁移(例如,生产数据库中的 Bannerad 模型没有average_price) 当我在生产中运行migrate 命令时。我该如何解决这个问题?

【问题讨论】:

您的意思是生产已运行迁移并且您要将其从项目中删除?如果是这样,只需从生产数据库中删除该迁移记录。 @markwalker_ 是的,我错误地删除了一个迁移的文件 【参考方案1】:

您可以使用--fake 参数将迁移标记为已应用

例如伪造每个未应用的迁移,直到0209

manage.py migrate --fake campaign 0209

请注意,您只能伪造完整的迁移,而不是迁移中的单个操作。

【讨论】:

以上是关于如何忽略生产中的一些迁移的主要内容,如果未能解决你的问题,请参考以下文章

生产构建后忽略组件样式

迁移测试中最重要的一点,经常被忽略?

迁移测试中最重要的一点,经常被忽略?

Sequelize 同步与迁移

将 RefineryCMS 从本地迁移到生产

生产环境中的 Laravel 4.x 迁移