使用产生替换AppEngine Devserver(BaseHTTPRequestHandler为WSGI)

时间:2009-08-18 11:16:58

标签: python google-app-engine wsgi

我希望用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应用程序,所以我的猜测是我需要在它周围添加一些东西才能使它工作。任何提示?

1 个答案:

答案 0 :(得分:2)

我认为你不能拔出dev_appserver的一部分,并且很容易在自定义的WSGI服务器中使用它。 dev_appserver做了很多“魔术”,它并没有真正的结构化被拉出来并用作另一个服务器中的WSGI包装器(更可惜的是)。

您可能想要查看正在制作备用服务环境的T wistedAE;如果你真的想使用产卵,你可以使用TwistedAE的工作作为基础。

那就是说,如果你想自己做,有几个选择:

  1. 您可以使用CreateRequestHandler返回的类编写自己的填充程序来连接WSGI。在这种情况下,您需要在Python SDK中的BaseHTTPServer。BaseHTTPRequestHandler中复制接口。转换WSGI到那个,只是因此dev_appserver代码可以将它转换回来似乎有点不正常。
  2. 您可以从DevAppServerRequestHandler的_HandleRequest方法中删除代码,修改它以使用WSGI,并从中创建一个WSGI应用程序(如果您想DIY,可能是最好的选择)。
  3. 你可以从头开始,我认为这是TwistedAE采用的方法。
  4. 无论你做什么都要记住:App Engine明确要求其应用程序采用单线程环境。如果您希望应用程序在本地工作,就像在生产环境中或在dev_appserver上一样工作,请不要使用多线程方法!