2011-03-01 5 views
14

가능한 중복 : 나는 mod_wsgi아파치 웹 서버에 성공적으로 장고 프로젝트를 배포 관리해야
How to manage local vs production settings in Django?관리 여러 settings.py 파일

.

여러 개의 settings.py 파일을 관리하는 방법에 대한 권장 사항이 필요합니다. 지금은 개발 용이고 생산 용으로는 완전히 다릅니다 (DB 매개 변수, 정적 컨텐츠 현지화 및 그런 것들과 관련 있음). 내 settings.py 파일 버전입니다 (이것은 좋은 방법이 있는지 알고하지 않는 것) 내가 좋아하는 뭔가를 배포 :

$ hg archive myproject.tbz2 
$ cd /path/of/apache/web/project/location 
$ bzip2 -db /home/myself/myproject/myproject.tbz2 | tar -xvf - 

것은 그것은 OK 일하고있어. 하지만 나는 여러 개의 settings.py 파일을 조작하고있다.

내 질문은 추측 : 가장 좋은 방법은 무엇입니까 여러 settings.py 파일 버전에 대한 장고 프로젝트를 배포 할 때?

+0

가능한 복제본 [장고에서 로컬 대 프로덕션 설정을 관리하는 방법] (http://stackoverflow.com/questions/1626326/how-to-manage- local-vs-production-settings-in-django) 또는 [프로덕션 서버의 Django 데이터베이스 설정] (http://stackoverflow.com/questions/4887851/django-database-settings-for-production-server) 또는 [Django dynamic 설정 인프라 및 모범 사례] (http://stackoverflow.com/questions/2109352/django-dynamic-settings-infrastructure-and-best-practices) –

+0

감사합니다. 나는 내 자신의 질문을 끝내기 위해 투표 할 것입니다. 당신이 언급 한 첫 번째 답변은 내가 찾고있는 답변입니다. 다시 한번 감사드립니다. –

답변

25

나는 하나의 파일이 아닌 설정 모듈 사용 :

settings/ 
    __init__.py 
    _base.py 
    _servers.py 
    development.py 
    production.py 
    testing.py 

__init__.py 파일은 간단하다 :

from _servers import get_server_type 
exec("from %s import *" % get_server_type()) 

_base.py 파일에 포함 된 일반적인 모든 설정이 모든 서버 유형에서을 .

_servers.py 파일은 현재 시스템은 서버의 종류를 확인하기 socket.gethostname()을 사용하는 기능 get_server_type()이 포함되어 있습니다 그것은 development, production 또는 testing를 반환합니다. 각 파일에

DEBUG=False 
TEMPLATE_DEBUG=False 
from _base import * 

, 난 단지이 서버 유형에 적용되는 설정에 넣어 :

그런 다음 다른 파일 (production.py) 같은 비트가 보인다.

+0

매우 똑똑한 접근법. 나는이 질문으로 많은 것을 배우고있다. 짐작할 수 있듯이 DJANGO의 첫 걸음을 내딛고 있습니다. :-) –

6

django-admin.py/manage.py 모두는 --settings=mysite.settings 옵션을 받아들입니다. 개발 중에 명시 적으로 --settings=dev_settings을 지정할 수 있습니다. 또한 아파치 설정에서 DJANGO_SETTINGS_MODUL E 환경 변수를 설정할 수 있습니다.

개인적으로 나는 단순히 settings.py를 체크인하지 않습니다. 대신 여러 설정 파일 (dev_settings, prod_settings 등)을 체크인하고 상징적으로이를 settings.py에 연결합니다. 이 방법은 단순히 내 응용 프로그램을 체크 아웃하면 실행 파일이 아닌 설정 파일이 적당하고 실제로 해당 설정 파일을 제자리에 배치 할 때까지 실행되지 않습니다.

내가 들어 또 다른 제안하지만, 특히이 존재하는 경우 동적으로 dev_settings.py을 가져 오는 settings.py을 가지고있다 좋아하지 않는다. 이 방법이 더 편리 할 수도 있지만 settings.py을 읽고 설정이 무엇인지 알기가 어려우므로 dev_settings.py 파일에있는 값이 무시 될 수도 있고 존재하지 않을 수도 있습니다.

+0

감사합니다. 마이크. 당신의 대답은 정말 도움이되었습니다. –

8

가장 일반적인 것으로 보이는 속임수는 settings.py 및 local_settings.py (각 환경에 하나씩) 파일을 모두 유지하는 것입니다.

환경 불가지론 설정은 settings.py에 가서 파일의 맨 아래에, 당신은 당신은 적절한 local_settings에 어떠한 settings.py 설정을 재정의 할 수 있습니다 local_settings.py

에서
try: 
    from local_settings import * 
except ImportError: 
    pass 

를 가져올 수 있습니다.평

+0

굉장 팁 jboutros. 감사. 그것을 명심하십시오. –

2

내 선호하는 방법은 단일 설정 또는 환경 변수를 기반으로 ConfigParser를 사용하여 별도의 ini 파일을로드하는 것입니다. 어쨌든 장고 위키에는 많은 다른 옵션이 설명되어 있습니다 : http://code.djangoproject.com/wiki/SplitSettings

+0

가능한 중복으로 표시된 질문에 대한 확장 답변을 참조하십시오. http://stackoverflow.com/a/9517763/384417 – rewritten