settings, wsgi 개발환경 분리

이지훈·2021년 10월 2일
0

여태까지는 settings.py 와 my_settings.py를 이용해서 개발했었다면 현직에서는 그렇지 않다는 것을 깨달았다. 그래서 분리하는 법을 공부했다.

  1. settings.py wsgi.py 분리
    배포 전에 다양한 프로젝트 설정을 포함하는 settings.py를 실행환경별로 분리한다.
    (실행 환경별로 필요한 프로젝트 설정이 다르기 때문)

settings 디렉토리

  • __init__.py
  • base.py (공통)
  • local.py (개발용)
  • deploy.py (배포용)

wsgi 디렉토리

  • __init__.py
  • local.py
  • deploy.py
  1. base.py는 말그대로 기본이 되는 파일이라 공통부분만 남기고 다 삭제한다.
import os

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
ROOT_DIR = os.path.dirname(BASE_DIR)

LANGUAGE_CODE = 'ko-kr'

TIME_ZONE = 'Asia/Seoul'

USE_I18N = True

USE_L10N = True

USE_TZ = True

# installed app, middleware 등..
  1. local.py
    로컬은 개발환경이므로 개발에 필요한 것을 기재한다. 물론 base.py에 기재되어있는 것도 그대로 가져온다.
  • debug=true는 오류가 난 이유를 상세하게 알려준다. 따라서 local 에서 쓴다.
from .base import *
DEBUG = True
WSGI_APPLICATION = 'api.wsgi.local.application'


DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB이름',
        'USER': '이름',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

# secret_key 도 기재
  1. deploy.py
    로컬은 개발환경이므로 개발에 필요한 것을 기재한다. 물론 base.py에 기재되어있는 것도 그대로 가져온다.
  • debug=false는 오류가 난 이유를 알려주지 않는다. 따라서 배포환경에서 쓴다.
    https://blog.joonas.io/58 참고
from .base import *
DEBUG = False
WSGI_APPLICATION = 'api.wsgi.deploy.application'


DATABASES = {
    'default' : {
        'ENGINE': '',
        'NAME': 'DB이름',
        'USER': '이름',
        'PASSWORD': '',
        'HOST': '아마존',
        'PORT': '',
    }
}

# secret_key 도 기재
  1. wsgi 디렉토리 설정
# local.py
import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'api.settings.local')

application = get_wsgi_application()

# deploy.py
import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'api.settings.deploy')

application = get_wsgi_application()

호출은 다음과 같이 한다. 나는 0:8000을 추가했는데 이걸 빼도 상관은 없다.

python manage.py runserver 0:8000 --settings=api.settings.deploy

python manage.py runserver 0:8000 --settings=api.settings.local

기본적으로 설정은 완료가 된 것이다.

아래와 같은 오류 시

django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

pip install whitenoise 해보세요
아니면, installed_app에 테이블 안넣은 것일 수도 있음!

profile
꾸준하게 🐌

0개의 댓글