Heroku:如何检测工头是否正在运行

时间:2015-01-21 03:36:38

标签: django heroku foreman

我正在使用eclipse开发我的Django项目,它将被部署到Heroku。为了检测应用程序是否在Heroku上运行,settings.py被修改:

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 个答案:

答案 0 :(得分:1)

Heroku为您提供DATABASE_URL,因此如果&#39; DATABASE_URL&#39;不存在,那就是它的本地机器

if not os.environ.has_key('DATABASE_URL'):
        os.environ['DATABASE_URL'] = 'postgres://user:password@localhost/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()