【问题标题】:Replace AppEngine Devserver With Spawning (BaseHTTPRequestHandler as WSGI)用 Spawning 替换 AppEngine Devserver(BaseHTTPRequestHandler 作为 WSGI)
【发布时间】:2009-08-18 11:16:57
【问题描述】:

我希望将 AppEngine 的开发服务器替换为 spawning。 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 应用程序,所以我猜我需要在它周围放置一些东西才能使它工作。有什么提示吗?

【问题讨论】:

  • 所以澄清一下,您不想在 Google 的服务器上执行此操作吗?您只想在自己的服务器上运行 appengine 应用程序。
  • 没错。但不是真的在服务器上,而是用于本地开发。
  • 我之前曾尝试让 appengine 堆栈在备用 WSGI 托管机制上工作。谷歌本可以通过让他们的代码本身成为一个 WSGI 应用程序来使其变得如此简单,可以将其放置在任何 WSGI 服务器之上,但他们没有。仅仅因为他们是 Google,并不意味着他们编写的代码比其他任何人都好。 ;-)
  • 我想做一些类似的事情,这样我就可以运行我的集成测试,否则我无法针对文件上传运行测试。在获得与您在 SO 上和通过高级支持渠道对此问题所做的类似回复后,我决定提交功能请求。 code.google.com/p/googleappengine/issues/detail?id=7266

标签: python google-app-engine wsgi


【解决方案1】:

我不认为您能够如此轻松地提取 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 上的运行相同,请不要使用多线程方法!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 2012-11-05
    • 2018-05-30
    • 2014-10-09
    • 2014-11-13
    • 1970-01-01
    • 2014-08-02
    相关资源
    最近更新 更多