나는 Django
개발을 할 때 SQLite 를 사용하는 경향이 있지만 라이브 서버에서는 종종 더 강력한 것이 필요합니다 ( 예 : MySQL / PostgreSQL ). 변함없이 Django 설정에도 다른 변경 사항이 있습니다 : 다른 로깅 위치 / 강도, 미디어 경로 등.
배포를 간단하고 자동화 된 프로세스로 만들기 위해 이러한 모든 변경 사항을 어떻게 관리합니까?
답변
업데이트 : django-configurations 가 출시되었습니다. 이것은 아마도 수동으로하는 것보다 대부분의 사람들에게 더 나은 옵션 일 것입니다.
수동으로 작업하려는 경우 이전 답변이 여전히 적용됩니다.
여러 설정 파일이 있습니다.
settings_local.py
-데이터베이스 이름, 파일 경로 등과 같은 호스트 별 구성settings_development.py
-개발에 사용되는 구성 (예 :DEBUG = True
.settings_production.py
-생산에 사용되는 구성 (예 :SERVER_EMAIL
.
이 모든 settings.py
것을 먼저 가져 오는 파일 settings_local.py
과 연결 한 다음 나머지 두 개 중 하나를 연결합니다. 그것은 내부의 두 설정에 의해로드 할 결정 settings_local.py
– DEVELOPMENT_HOSTS
와 PRODUCTION_HOSTS
. 실행중인 시스템의 호스트 이름을 찾기 위해 settings.py
호출 platform.node()
한 다음 목록에서 해당 호스트 이름을 찾고 호스트 이름을 찾은 목록에 따라 두 번째 설정 파일을로드합니다.
이렇게 settings_local.py
하면 호스트 별 구성을 사용 하여 파일을 최신 상태로 유지하고 나머지는 모두 자동으로 처리해야합니다.
답변
개인적으로 저는 프로젝트에 대해 하나의 settings.py를 사용합니다. 저는 단지 그것이있는 호스트 이름을 찾도록합니다 (제 개발 머신은 “gabriel”로 시작하는 호스트 이름을 가지고 있습니다. 그래서 저는 이것을 가지고 있습니다 :
import socket
if socket.gethostname().startswith('gabriel'):
LIVEHOST = False
else:
LIVEHOST = True
다른 부분에는 다음과 같은 것이 있습니다.
if LIVEHOST:
DEBUG = False
PREPEND_WWW = True
MEDIA_URL = 'http://static1.grsites.com/'
else:
DEBUG = True
PREPEND_WWW = False
MEDIA_URL = 'http://localhost:8000/static/'
등등. 가독성이 조금 떨어지지 만 잘 작동하며 여러 설정 파일을 저글링해야하는 시간을 절약합니다.
답변
settings.py의 끝에 다음이 있습니다.
try:
from settings_local import *
except ImportError:
pass
이렇게하면 기본 설정을 재정의하려면 settings.py 바로 옆에 settings_local.py를 배치하면됩니다.
답변
두 개의 파일이 있습니다. settings_base.py
공통 / 기본 설정을 포함하고 소스 제어에 체크인됩니다. 각 배포에는 처음에 settings.py
실행 된 from settings_base import *
다음 필요에 따라 재정의 하는 별도 의이 있습니다.
답변
내가 찾은 가장 단순한 방법은 다음과 같습니다.
1) 로컬 개발을 위해 기본 settings.py 를 사용 하고 2) 다음으로 시작 하는 production-settings.py를 만듭니다 .
import os
from settings import *
그런 다음 프로덕션에서 다른 설정을 재정의하십시오.
DEBUG = False
TEMPLATE_DEBUG = DEBUG
DATABASES = {
'default': {
....
}
}
답변
여러 데이터베이스에 Django 자체를 배포하는 문제와 관련하여 Djangostack 을 살펴볼 수 있습니다. Apache, Python, Django 등을 설치할 수있는 완전 무료 설치 프로그램을 다운로드 할 수 있습니다. 설치 과정의 일부로 사용할 데이터베이스 (MySQL, SQLite, PostgreSQL)를 선택할 수 있습니다. 내부적으로 배포를 자동화 할 때 설치 프로그램을 광범위하게 사용합니다 (무인 모드에서 실행할 수 있음).
답변
내 settings.py 파일이 외부 디렉터리에 있습니다. 이렇게하면 소스 제어에 체크인되거나 배포시 덮어 쓰여지지 않습니다. 기본 설정과 함께 내 Django 프로젝트의 settings.py 파일에 넣습니다.
import sys
import os.path
def _load_settings(path):
print "Loading configuration from %s" % (path)
if os.path.exists(path):
settings = {}
# execfile can't modify globals directly, so we will load them manually
execfile(path, globals(), settings)
for setting in settings:
globals()[setting] = settings[setting]
_load_settings("/usr/local/conf/local_settings.py")
참고 : local_settings.py를 신뢰할 수없는 경우 매우 위험합니다.