이슈 상황
어느 날부터 gitlab ci/cd 의 test job 에서 failed 가 떴다.
Creating test database for alias 'default'...
Got an error creating the test database: database "test_~~~" already exists
Type 'yes' if you would like to try deleting the test database
'test_~~~', or 'no' to cancel: Traceback (most recent call last):
Plain Text
복사
test database 가 존재해서 test database 를 생성하는데에 에러가 발생했다고 뜬다.
이슈 원인
커맨드로 yes or no 를 입력해야하는데 ci/cd runner 에서 따로 입력하는게 없으니 job 이 failed 가 된 것이다.
Command 의 handle 함수를 오버라이딩 한다.
django 에서 test 를 할 시, 기본적으로 test_[DB이름] 의 database 가 만들어지고 test 가 종료되면 해당 database 를 삭제한다.
그런데 test 가 비정상적으로 종료됐을 때는, test db 가 삭제되지 않는다.
따라서 새롭게 test 를 돌릴 때 test database 가 이미 존재한다고 뜬다.
이슈 해결
custom command 를 통해 non-interactive 모드로 실행되게끔 한다.
[app이름]/management/commands/test.py
from django.core.management.commands.test import Command as BaseCommand
class Command(BaseCommand):
def handle(self, *test_labels, **options):
# Wrap Django's built-in test command to always delete the database if
# it exists
options["interactive"] = False
return super().handle(*test_labels, **options)
Python
복사
test database 가 이미 존재한다고 error 가 나긴하지만, old test database 를 삭제해준다.