2015-01-21 85 views
1

我使用eclipse開發我的Django項目,並將其部署到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上。但是,如果我嘗試運行foreman start而不是runserver,則wsgi.py中的設置將不起作用,因爲foreman也需要Cling

有沒有一種方法可以檢測到應用程序是否由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'在本地運行。 – 2015-01-21 03:48:59

+0

@ yltang52對不起,我正在旅行。我更新了我的答案。 – 2015-01-21 06:53:01

+0

太棒了!非常感謝。 – 2015-01-21 07:35:35

相關問題