2010-01-20 4 views
13

나는 다음과 같은 입력해야 내가 SSH를 통해 내 서버에 로그온 할 때마다 : 내가 할 경우왜 DJANGO_SETTINGS_MODULE 세트가 필요합니까?

export DJANGO_SETTINGS_MODULE=settings 

하지 manage.py 모듈의 사용은 내 manage.py는 다음을 가지고

실패 코드 추가 :

if "notification" in settings.INSTALLED_APPS: 
    from notification import models as notification 

    def create_notice_types(app, created_models, verbosity, **kwargs): 
     notification.create_notice_type("friends_invite", _("Invitation Received"), _("you have received an invitation")) 
     notification.create_notice_type("friends_accept", _("Acceptance Received"), _("an invitation you sent has been accepted")) 

    signals.post_syncdb.connect(create_notice_types, sender=notification) 
else: 
    print "Skipping creation of NoticeTypes as notification app not found" 

아이디어가 있으십니까?

답변

11

manage.py이 (notifications) 응용 프로그램을 참조하고 있습니다. 이것은 Django 환경이 아직 설정되지 않았기 때문에 Django가 DJANGO_SETTINGS_MODULE에 대해 불평하도록합니다.

덧붙여서, 환경 설정을 수동으로 강제 할 수 있습니다 만, 솔직히 manage.py에서는 이것을하지 않습니다. 그건 내 생각에 좋은 연습이 아니야. 여기

은 얼마나 할 수 있습니다 수동으로 설정 (그 문제에 대한 또는 프로그램) 장고 어떤 응용 프로그램 내에서 환경 : 당신은 그것을 장고 어떤 설정 모듈을 아는 방법이기 때문에 DJANGO_SETTINGS_MODULE 환경 변수를 설정해야합니다

# set up the environment using the settings module 
from django.core.management import setup_environ 
from myapp import settings 
setup_environ(settings) 
+0

답장을 보내 주셔서 감사합니다. 이식성이 떨어 지므로 권장하지 않는다는 뜻입니까? 이유를 설명해주십시오. – RadiantHex

+2

예, 이식성이 떨어집니다. 관리 도구와 응용 프로그램을 연결하는 어떤 것도 피해야합니다. 응용 프로그램과 프로젝트에는 모두 독립적으로 움직이는 부분이 있어야합니다. 애플리케이션을 다른 프로젝트로 옮기거나 현재 프로젝트에서 애플리케이션을 제거해야하는 미래를 상상해보십시오. 그것들이 서로 얽혀 있지 않고 대신에 앱 자체에서 (안전하게) 어떤 종류의 수표를 안전하게 수행하는 것이 가장 좋습니다. – jathanism

6

은 (직접 또는 간접적으로) django를 가져 오기 전에 전에 으로 설정할 수 있지만 장고를 실행할 때 그다지 좋지는 않습니다. 제공되는 스크립트.

가장 쉬운 해결책은 쉘의 시작 스크립트에서 DJANGO_SETTINGS_MODULE을 설정하는 것이므로 수동으로 더 이상 설정할 필요가 없습니다. 추가 할 파일은 .bash_profile과 .bashrc입니다 (실제로 bash를 사용하는 경우).

+0

토마스에게 감사드립니다. bash 스크립트와 관련된 어떤 방향으로 나를 가리킬 수 있습니까? 퍼티를 통해 로그인 중이며 스크립트가 실행될 때 아무런 단서도 없습니다. – RadiantHex

+1

로그인하는 OS 또는 배포판에 대한 설명서는 좋은 시작일 것입니다. :)하지만 좋은 방법은 동일한 내보내기 라인을 추가하는 것입니다. .bash_profile 또는 .bashrc 파일에 다른 유사한 내보내기 행 근처에 이미 사용하고있는 것처럼. 어느 하나가 새로운 쉘마다로드되어야합니다. –

0

기본적으로 manage.py는 동일한 디렉토리에서 설정 모듈을 찾습니다. 찾지 못하면 django-admin.py를 대신 사용하라는 메시지와 함께 폭탄을 터뜨린다. execute_manager이 실행될 때까지 실제로 환경을 설정하지 않습니다. 관리 함수를 호출하기 전에 후크를 실행해야한다면 필자가 본 적이있는 연습은 해당 앱의 models.py에 넣는 것입니다.