【问题标题】:Heroku: how to detect if foreman is runningHeroku:如何检测工头是否正在运行
【发布时间】:2015-01-21 03:36:37
【问题描述】:

我正在使用 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 运行,以便进行正确设置?

【问题讨论】:

    标签: django heroku foreman


    【解决方案1】:

    Heroku 为您提供DATABASE_URL,所以如果 'DATABASE_URL' 不存在,那么它是本地机器

    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'])}
    

    更新:匹配确切问题的答案。

    过程文件

    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()
    

    【讨论】:

    • 谢谢,但我不想确定应用程序是在本地运行还是在 Heroku 上运行。我正在尝试确定应用程序是使用manage.py runserver 还是foreman start 在本地运行。
    • @yltang52 抱歉重播晚了,我正在旅行。我更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 2016-04-25
    相关资源
    最近更新 更多