19

現在、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'

環境値を出力すると、環境変数が渡されていないことが確認されます。virtualenv アクティベーション スクリプトと専用の gunicorn シェル スクリプトで環境変数を設定しようとしました。また、 --env フラグを使用して環境変数を設定してみました。しかし、何も機能していないようです。

何か案は?

4

4 に答える 4

-1

ここで何をしようとしているのかよくわかりません。bash コマンド ラインで環境変数を渡す場合、それらは既にに含まれていos.environます。他の場所から取得する必要はありません。environディクショナリは、シェルではなく、リクエストから渡された要素で構成されています。

于 2014-08-01T09:07:27.610 に答える