要检查是否需要合并迁移,我可以运行manage.py makemigrations --check
或manage.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中检查这个,他们不想处理集装箱化问题。
有没有人找到一种简单的方法来检查迁移合并冲突而不需要数据库?
答案 0 :(得分:1)
由于目标是在没有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': '',
}
}