检查是否需要合并迁移,没有数据库

Check if merge migration is required, without database

要检查是否需要合并迁移,我可以 运行 manage.py makemigrations --checkmanage.py makemigrations --dry-run

但是,这两者都需要数据库处于启动状态。如果它没有启动,它会出现类似

的错误

django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)")

理论上,由于合并迁移问题是由于同一父项的两次迁移而发生的,因此您不需要数据库实例启动来检查这种情况。

我需要这个,因为我想让我的 CI 检查这个案例。我可以启动一个 docker 数据库,但对于逻辑上什至不依赖的东西来说,这是额外的工作。我也确信有些人有兴趣在他们的 CI 中检查这个,他们不想处理容器化。

有没有人找到一种无需启动数据库即可检查迁移合并冲突的简单方法?

由于目标是在没有 mysql 数据库的情况下 运行 makemigrations --dry,我想到的最简单的解决方法是创建一个名为 makemigrations_settings.py 的新设置文件覆盖数据库以使用内置的 sqlite 数据库。

from your_main_settings import *
DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'database_name',
        'USER': 'your_mom',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    },
}

那你可以运行

python manage.py makemigrations --check --settings yourapp.makemigrations_settings

或者,你可以不那么优雅地做一些像

if (sys.argv[0:2] == ['manage.py', 'makemigrations']
    and ('--dry-run' in sys.argv or '--check' in sys.argv)):
            DATABASES = {
                'default' : {
                    'ENGINE': 'django.db.backends.sqlite3',
                    'NAME': 'database_name',
                    'USER': 'your_mom',
                    'PASSWORD': '',
                    'HOST': '',
                    'PORT': '',
                }
            }