2017-09-11 72 views
0

要检查是否需要合并迁移,我可以运行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中检查这个问题,他们不想处理集装箱化问题。

有没有人找到一个简单的方法来检查迁移合并冲突,而不需要数据库了?

回答

0

由于目标是在没有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': '', 
       } 
      }