我正在使用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
运行,以便我可以进行正确的设置?
答案 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()