2017-09-11 100 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': '', 
       } 
      }