目前我在尝试将环境变量传递给我的Django项目中的Gunicorn,但是遇到了困难。我正在使用最新的19.1版本。我有一个类似于以下代码的wsgi.py文件:
import os
import sys
from django.core.wsgi import get_wsgi_application
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_DIR = os.path.abspath(os.path.join(BASE_DIR, '..'))
sys.path.append(PROJECT_DIR)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings")
def application(environ, start_response):
_application = get_wsgi_application()
os.environ['SERVER_ENV'] = environ['SERVER_ENV']
os.environ['SERVER_ID'] = environ['SERVER_ID']
return _application(environ, start_response)
当我在命令行上运行gunicorn时:
SERVER_ENV=TEST SERVER_ID=TEST gunicorn -b 127.0.0.1:8080 --error-logfile - --access-logfile - app.wsgi:application
当我向gunicorn发送请求时,我经常会遇到以下问题:
2014-08-01 08:39:17 [21462] [ERROR] Error handling request
Traceback (most recent call last):
File "/opt/virtualenv/python-2.7.5/django-1.5.5/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 93, in handle
self.handle_request(listener, req, client, addr)
File "/opt/virtualenv/python-2.7.5/django-1.5.5/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 134, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/opt/sites/itracker/wsgi.py", line 18, in application
os.environ['SERVER_ENV'] = environ['SERVER_ENV']
KeyError: 'SERVER_ENV'
打印出环境变量值可以确认环境变量未被传递。我尝试在虚拟环境激活脚本中设置环境变量,也尝试在专用的 gunicorn shell 脚本中设置环境变量,并尝试使用 --env 标志设置环境变量,但似乎都无效。
有任何想法吗?
MY_VAR=someValue
而不是export MY_VAR=someValue
。如果其他人遇到类似问题,希望可以提供帮助。 - johnchase