2015-01-21 4 views
1

Eclipse를 사용하여 장고 프로젝트를 개발하고 Heroku에 배포 할 것입니다. 응용 프로그램이 Heroku가 실행중인 경우 감지하기 위해, settings.py은 수정 :Heroku : 장교가 실행 중인지 확인하는 방법

if 'DYNO' in os.environ: # Is running on Heroku 
    DEBUG = False 
else: 
    DEBUG = True 
... 

if DEBUG==True: 
    DATABASES = { 
     'default': { 
      ... 
     } 
    } 
else: # For Heroku 
    # Parse database configuration from $DATABASE_URL 
    import dj_database_url 
    DATABASES = {'default':dj_database_url.config()} 
    # Honor the 'X-Forwarded-Proto' header for request.is_secure() 
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 

을 또한 wsgi.py 수정 :

from <myApp> import settings 

if settings.DEBUG==True: 
    application = get_wsgi_application() 
else: # For Heroku 
    from dj_static import Cling 
    application = Cling(get_wsgi_application()) 

위의 수정 앱이 runserver 또는 로컬로 실행중인 경우 식별 할 수 있습니다 Heroku에. 그러나 runserver 대신 foreman start을 실행하려고하면 foreman에도 Cling이 필요하기 때문에 wsgi.py의 설정이 작동하지 않습니다.

응용 프로그램이 foreman에 의해 실행되는 경우 감지하여 적절한 설정을 할 수있는 방법이 있습니까?

답변

1

는 Heroku가 당신에게 DATABASE_URL을 제공, 그래서 'DATABASE_URL은'어떤 존재하지 않습니다 경우, 다음은 로컬 컴퓨터 업데이트

if not os.environ.has_key('DATABASE_URL'): 
     os.environ['DATABASE_URL'] = 'postgres://user:[email protected]/name' 

DATABASES = {'default': dj_database_url.config(default=os.environ['DATABASE_URL'])} 

입니다 : 정확한 질문에 일치 대답.

Procfile

export SERVER_ENV=foreman 
web: gunicorn yourapp.wsgi 

wsgi.py

if os.getenv('SERVER_ENV') == 'foreman': 
    application = Cling(get_wsgi_application()) 
else: 
    application = get_wsgi_application() 
+0

감사합니다,하지만 난 앱이 로컬 또는 Heroku가 실행되고 있는지 확인하는 것을 시도하고 있지 않다. 응용 프로그램이'manage.py runserver' 또는'foreman start'로 로컬로 실행되는지 확인하려고합니다. –

+0

@ yltang52 늦게 재생해서 죄송합니다. 여행 중이 었습니다. 그리고 나는 나의 대답을 업데이트했다. –

+0

좋아요! 고마워. –