2011-08-11 4 views
1

저는 개발과 장고 프레임 워크에 대한 sysadmin 작업을하기에 새로운 경험이 있습니다. 내 로컬 dev 스테이션 및 프로덕션 환경에 다른 사용자 이름/암호를 갖고 싶습니다.장고 용 빌드 자동화

저는 서버로 dotcloud를 사용하고 있습니다. 나는 포스트 스크립트 (파이썬, bash, 뭐든간에)를 작성할 수 있으며, 모든 새로운 푸시에서 그것을 실행할 것이다.

그러나이 문제를 해결하는 방법을 모르겠습니다. 나는 이것을 직접 써야 하나? 파이썬/장고 빌드 자동화 도구가 저에게 도움이 될까요?

명확화 : 서버에서 참 true로 설정하려면 debug=false을 어떻게 변경할 수 있습니까?

+0

[buildout] (http://www.buildout.org/)을 살펴보십시오. 또는 [Fabric] (http://docs.fabfile.org/ko/1.2.0/index.html) –

답변

1

대개 내 프로젝트가 로컬 디렉토리 구조에있는 경우 production.py의 끝에 개발 설정을 가져옵니다.

또한 DB 설정 및 제작 및 개발에서 다른 설정을 별도의 파일에 저장하고 SVN에서 사용하는 모든 것을 삭제할 수 있습니다.

그냥 settings.py의 끝이 추가

try: 
    from myapp.specific_settings import * 
except ImportError: 
    pass 

를이 경우, specific_settings 생산 및 개발 환경에서 다를 수 있습니다. 나는 거기에 몇 가지 버그를 내 머리 위에 쓴하고있을 수 있습니다

import os 
directory = os.path.dirname(__file__) 
if directory == '/home/yourname/development/': 
    from myapp.development_settings import * 
else: 
    from myapp.production_settings import * 

참고 :

동적으로 개발 및 생산 서버 사이에서 선택하려면

는 설정의 끝 부분에 사용합니다. 나는 집에 갈 때 그걸 증명할 것이다.

+0

음, 확장해도 되니? – CamelCamelCamel

+0

내 이전 게시물을 수정했습니다. – mohi666

+1

이것이 작동하지 않으면,'from package import module'에서 가져온 이름은 예를 들어'module.DEBUG'로 이름 공간이됩니다. Django는'production_settings.DEBUG' 상수를 기꺼이 무시할 것입니다. 실제 설정이 들어있는 하나 또는 다른 모듈에서'*'를 가져와야합니다. – rewritten

3

django 표준 방법은 environmanet 변수 DJANGO_SETTINGS_MODULE을 사용하는 것입니다. 다른 설정으로 포인트 및하자 모두 일반적인 것들에 대한 공통 설정 모듈 가져옵니다

# settings_production.py 

from settings_common import * 
DEBUG = False 
DATABASES = {...} 


# settings_development.py 

from settings_common import * 
DEBUG = True 
DATABASES = {...} 


# settings_common.py 

INSTALLED_APPS = (...) # etc 

당신은 또한 점점 같은 일부 시스템 상태에 따라 다른 하나에서 하나의 메인 설정 및 가져 오기 이름을 사용하는 다른 전략을 사용할 수 있습니다 os.platform.node() 또는 socket.gethostname()을 입력하고 해당 값 (또는 그 일부)을 전환하십시오.

reversed_hostname_parts = socket.gethostname().split('.').reverse() 
host_specific = { 
    ('com', 'dotcloud'): 'production', 
    ('local'): 'dev', 
} 

for index in range(len(reversed_hostname_parts)): 
    identifier = tuple(reversed_hostname_parts[:index+1]) 
    if identifier in host_specific: 
     extra_settings = host_specific[identifier] 
     break 
else: # executed when the loop has not been `break`ed 
    extra_settings = 'dev' # any default value 


if extra_settings == 'dev': 
    from development_settings import * 
elif extra_settings == 'production': 
    from production_settings import * 

편집 :

다른 전략에 대한 https://code.djangoproject.com/wiki/SplitSettings를 참조 추가 링크.

+0

첫 번째 대답을 사용했지만 두 응답의 오버 헤드가 마음에 들지 않습니다. 이것은 앱 코드에 있어야한다고 생각하지 않습니다. 빌드 자동화 나 그와 유사한 것을위한 쉘 스크립트 여야합니다. 예 : 코드 주위에 디버그 코드를 뿌려야한다고 말하면 배포 할 때 코드를 제거해야합니까?나는 여전히 더 나은 해결책을 찾고있다. :) – CamelCamelCamel

+0

예. html5 상용구 빌드. 그런 식으로. 어쨌든 – CamelCamelCamel

+0

디버깅 로그는 프로덕션 로깅 구성에 의해 필터링되어야합니다. 다른면에서 어떻게 빌드 시스템이 나머지 부분의 "디버그 코드"를 말할 것이라고 기대할 수 있습니까? 배포 위치에 따라 두 개의 다른 코드를 사용 하시겠습니까? 아마도 코드를 테스트하는 능력에 나쁜 영향을 미칠 것입니다. – rewritten