1

よくわかりません。

AppEngine が WSGI を使用するアプリの実行を許可することになっている場合..

# somewhere in a webapp.RequestHandler
env = dict(os.environ.items())
for key, value in env.items():
    self.response.out.write(key+': '+value+'<br/>')

req_uri = wsgiref.util.request_uri(env)

.. では、 PEP 333が存在しなければならないとしてリストしてenvいる変数が含まれていないのはなぜですか?wsgiref.util.request_uri()KeyError

私は基本的に、AppEngine または典型的な Apache + modwsgi セットアップのいずれかで動作する必要があるいくつかのライブラリを作成しています。単に準拠したアプリを作成するだけで十分だと思っていましたがWSGI、AppEngine 自体は..そうではありませんか?

4

2 に答える 2

4

wsgi 固有のenvironキーを含める必要があるのは、wsgi アプリケーション呼び出し可能に渡される環境です。PEP-333 では、これが value である必要はありませんos.environ。CGI アプリケーションは、キーの多くが にあることを検出しますos.environ。これは、ゲートウェイ サーバーがキーを提供し、cgi から wsgi へのゲートウェイ インターフェイス (たとえば、wsgiref.handlers.CGIHandler) が、wsgi アプリケーションを呼び出す前に wsgi 固有のキーのみを追加する必要があるためです。

明確にするために、PEP-333 で が言及されているenviron場合、それは を意味するものではありません os.environ

編集:google.appengine.ext.webapp.Requestどうやら から継承しwebob.Requestます。したがって、webapp ハンドラーは wsgi にアクセスできますenviron

class MainPage(webapp.RequestHandler):
    def get(self):
        dosomethingwith(self.request.environ)
于 2011-07-11T15:44:58.823 に答える
1

os.environAFAIK pep 333は、CGIをエミュレートしない限り、すべてのwsgi環境変数を強制的に強制することについて何も述べていません.wsgi環境変数にこれらのものを含める必要があるだけです。

wsgi アプリケーションのコンテキスト内では、environ ディクショナリは、wsgi アプリケーション関数に渡される部分です。GAE では、 経由で wsgi 環境ディクテーションにアクセスできますrequest.environ。したがって、あなたのコードは次のようになるはずです。

# somewhere in a webapp.RequestHandler
env = self.request.environ
for key, value in env.iteritems():
    self.response.out.write(key+': '+value+'<br/>')
req_uri = wsgiref.util.request_uri(env)
于 2011-07-11T15:37:05.253 に答える