1

AppEngine の devserver をspawningに置き換えようとしています。Spawning は、appengine と同様に標準の wsgi ハンドラを処理するため、アプリを簡単に実行できます。

しかし、devserver は、URL リダイレクトなどを含む app.yaml ファイルを考慮に入れます。私は devserver コードを調べてきましたが、次のように BaseHTTPRequestHandler を取得するのは非常に簡単です。

from google.appengine.tools.dev_appserver import CreateRequestHandler
dev = CreateRequestHandler(os.path.dirname(__file__), '', require_indexes=False, static_caching=True)

しかし、BaseHTTPRequestHandler は WSGI アプリではないので、これを機能させるには何かを配置する必要があると思います。ヒントはありますか?

4

1 に答える 1

2

dev_appserver の一部を取り出してカスタム WSGI サーバーで簡単に使用できるとは思えません。dev_appserver は多くの「魔法」を行いますが、別のサーバーで WSGI ラッパーとして取り出されて使用されるように実際には構造化されていません (これ以上は残念です)。

T wistedAEをチェックしてみてください。これは代替サービス環境の作成に取り組んでいます。本当にスポーンを使用したい場合は、おそらく TwistedAE の作業をベースとして使用できます。

とはいえ、自分でやりたい場合は、いくつかのオプションがあります。

  1. 独自の shim を記述して、CreateRequestHandler によって返されるクラスと WSGI をインターフェイスさせることができます。その場合、Python SDK からBaseHTTPServer .BaseHTTPRequestHandler のインターフェースを複製する必要があります。ただし、dev_appserver コードがそれを元に変換できるように WSGI をそれに変換するのは、少しひねくれているように思えます。
  2. DevAppServerRequestHandler の _HandleRequest メソッドからコードを取り出し、WSGI で動作するように変更して、そこから WSGI アプリを作成できます (DIY を行う場合は、おそらく最善の方法です)。
  3. ゼロから始めることができます。これが TwistedAE のアプローチだと私は信じています。

何をするにしても心に留めておくべきことの 1 つは、App Engine はそのアプリにシングル スレッド環境を明示的に想定していることです。アプリを本番環境や dev_appserver と同じようにローカルで動作させたい場合は、マルチスレッド アプローチを使用しないでください。

于 2009-09-02T09:24:15.687 に答える