1

我正在寻找用spawning替换 AppEngine 的 devserver 。Spawning 处理标准 wsgi 处理程序,就像 appengine 一样,因此在其上运行您的应用程序很容易。

但是 devserver 会考虑您的 app.yaml 文件,其中包含 url 重定向等。我一直在浏览 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 包装器(更遗憾的是)。

您可能想查看TwistedAE,它正在努力创建替代服务环境;如果你真的想使用 spawning,你可以使用 TwistedAE 的工作作为基础。

也就是说,如果您确实想自己做,有几个选择:

  1. 您可以编写自己的 shim 以将 WSGI 与 CreateRequestHandler 返回的类接口。在这种情况下,您需要从 Python SDK 复制BaseHTTPServer .BaseHTTPRequestHandler 中的接口。不过,将 WSGI 转换为那个,只是为了让 dev_appserver 代码可以将其转换回来,这似乎有点不合时宜。
  2. 您可以从 DevAppServerRequestHandler 的 _HandleRequest 方法中提取代码,修改它以使用 WSGI,然后从中创建一个 WSGI 应用程序(如果您想 DIY,这可能是您最好的选择)。
  3. 您可以从头开始,我相信这是 TwistedAE 采用的方法。

无论您做什么都要牢记一件事:App Engine 明确要求其应用程序使用单线程环境。如果您希望应用程序在本地运行与它们在生产或 dev_appserver 上的运行方式相同,请不要使用多线程方法!

于 2009-09-02T09:24:15.687 回答