해결된 질문
작성
·
1.4K
0
강의내용대로 쭉 따라가면서
askcomapny경로에서 settings 폴더를생성
cd askcompany로 경로 이동후 git add .를 한뒤 git mv settings.py settings/common.py 로 파일이동
그 상태로 runserver를 해봤더니 CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False. 오류가 뜸
원래 경로에 settings.py파일을 다시 만들어 보고 runserver를 해봤더니 오류가 사라짐
옮기는 과정에서 문제가 있는건지는 모르겠네요 DEBUG = True 이고 ALLOWED_HOSTS = ['*'] 설정까지도 해봤는데 왜 저런 오류가 뜨는걸까요?
답변 1
0
안녕하세요.
askcompany/settings.py 파일을 askcompany/settings/common.py 경로로 옮기시고 그대로 runserver를 하셨습니다.
장고에서는 DJANGO_SETTINGS_MODULE 환경변수를 통해, 현재 장고프로젝트에서 사용할 settings 경로를 지정합니다. 이 설정은 직접 DJANGO_SETTINGS_MODULE 환경변수를 설정하셔도 되고, runserver 시에 --settings 인자로 지정하실 수도 있습니다.
DJANGO_SETTINGS_MODULE 환경변수를 지정하지 않으셨고, --settings 인자도 지정하지 않으셨다면
manage.py 파일 내에 지정된 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "askcompany.settings") 코드에 의해, DJANGO_SETTINGS_MODULE 환경변수가 디폴트로 "askcompany.settings"로 지정이 됩니다.
그럼 askcompany/settings.py 시에는 잘 동작합니다. 왜냐하면 askcompany/settings.py 경로가 "askcompany.settings" 경로에 부합되기 때문이죠.
그런데 이 파일을 askcompany/settings/common.py 경로로 옮기셨는 데 DJANGO_SETTINGS_MODULE 경로는 그대로 askcompany.settings 로 되어있으니, 참조할려는 settings 가 없는 것입니다.
장고의 settings는 프로젝트의 디폴트 설정과 더불어 프로젝트의 DJANGO_SETTINGS_MODULE 설정을 덮어쓰기한 내역을 참조합니다. 그런데 DJANGO_SETTINGS_MODULE 경로에 지정된 파일이 없을 경우, 장고의 디폴트 설정만 로딩이 되겠죠.
장고의 디폴트 설정은 django/conf/global_settings.py 경로에 정의되어있습니다. 이 파일에 DEBUG = False 설정이 있으며, ALLOWED_HOSTS = [] 설정이 있습니다.
관련 코드 : https://github.com/django/django/blob/main/django/conf/global_settings.py#L17
그러니 askcompany/settings.py 파일을 askcompany/settings/common.py 경로로 옮긴 것은 이관 작업이 덜 끝난 것입니다. 이는 개발환경에서의 설정과 배포환경에서의 설정을 별도의 파일로 분리하기 위함입니다. 제가 가이드에서 askcompany/settings/dev.py 파일과 askcompany/settings/prod.py 파일을 생성하고, manage.py 파일에서 os.environ.setdefault 코드 부분을 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "askcompany.settings.dev") 경로로 수정하시라 가이드를 드릴 것입니다. 그리고 askcompany/wsgi.py 파일에서는 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "askcompany.settings.prod") 경로로 수정을 하시라 가이드를 드릴 것이구요.
차근차근 확인해보시고, 궁금한 점 있으시면 편히 질문 남겨주세요.
화이팅입니다. :-)
파이참 메뉴를 통한 실행은 어떤 옵션이 지정되어있는 지에 따라 실행이 달라질 수 밖에 없습니다. DJANGO_SETTINGS_MODULE 환경변수가 어떤 값으로 지정되어있을 수도 있구요. 그러니 그 설정값을 확인해보셔야 합니다.
@qwd123 : settings 위치 변경으로 인해, BASE_DIR도 변경해주셔야하는 데 변경해주시지않아, settings.DATABASES에서 바라보는 db.sqlite3 파일의 경로가 기존 주소를 가리키지않아서 데이터베이스가 없는 것으로 장고가 판단한 상황으로 보입니다.
그래서 migrate 명령으로 데이터베이스 생성이 필요하신 상황이 되셨던 것입니다.
BASE_DIR 설정값을 확인해보세요.
확인해보시고 댓글 부탁드립니다.
넵 감사합니다. 파이참에서 시프트 + F10으로 실행해서 오류가 난거더라고요 ㅜㅜ
python manage.py runserver를 하니깐 오퍼레이터 테이블 오류 또서 migrate했더니 정상작동되네요.
혹시 파이참에서 시프트 + F10으로 실행시키는거랑 터미널에서 python manage.py runserver로 실행시키는거랑 차이점이 있는지 궁금합니다! 답변해주셔서 감사해요!