[python] 간단한 개발 및 배포를 위해 Django를 어떻게 구성합니까?

나는 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.pyDEVELOPMENT_HOSTSPRODUCTION_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를 신뢰할 수없는 경우 매우 위험합니다.