【问题标题】:Working with subdomain in google app engine在谷歌应用引擎中使用子域
【发布时间】:2009-05-08 03:15:08
【问题描述】:

如何在谷歌应用引擎 (python) 中使用子域。

我想获得第一个域部分并采取一些行动(处理程序)。

示例:
product.example.com -> 将其发送给产品处理程序
user.example.com -> 将其发送给用户处理程序

实际上,使用虚拟路径我有这个代码:

  application = webapp.WSGIApplication(
    [('/', IndexHandler),
     ('/product/(.*)', ProductHandler),
     ('/user/(.*)', UserHandler)
  ]

【问题讨论】:

    标签: python google-app-engine subdomain


    【解决方案1】:

    WSGIApplication 不能基于域进行路由。相反,您需要为每个子域创建一个单独的应用程序,如下所示:

    applications = {
      'product.example.com': webapp.WSGIApplication([
        ('/', IndexHandler),
        ('/(.*)', ProductHandler)]),
      'user.example.com': webapp.WSGIApplication([
        ('/', IndexHandler),
        ('/(.*)', UserHandler)]),
    }
    
    def main():
      run_wsgi_app(applications[os.environ['HTTP_HOST']])
    
    if __name__ == '__main__':
      main()
    

    或者,您可以编写自己的 WSGIApplication 子类,它知道如何处理多个主机。

    【讨论】:

    • 谢谢!你有这个子 WSGIApplication 的样本给我吗?我用 python 说明...
    • 查看code.google.com/p/googleappengine/source/browse/trunk/python/… 的当前源代码 - 修改 call 方法以考虑主机名应该相当简单。
    • 上面的代码似乎在生产环境中无法使用链接到一个 GAE 应用程序的两个子域。有人让这个工作吗?
    • Nick - 这个多域示例如何在 Python 2.7 运行时工作?在 app.yaml 中,我现在直接指定 WSGI 应用程序。那么,我是否应该在 app.yaml 中指定 Python 脚本并像上面一样对待它,或者是否有更简化的方式直接使用 WSGI 应用程序执行此操作?
    • Nick - 另一个相关问题:在部署之前,您如何在 dev_appserver 上测试/模拟这些类型的多域应用程序?如果所有请求都来自本地主机,那么 dev_appserver 如何区分针对不同子域的请求?
    【解决方案2】:

    我喜欢尼克的想法,但我有一个稍微不同的问题。我想匹配一个特定的子域来处理它有点不同,但所有其他子域应该处理相同。这是我的例子。

    import os
    
    def main():
       if (os.environ['HTTP_HOST'] == "sub.example.com"):
          application = webapp.WSGIApplication([('/(.*)', OtherMainHandler)], debug=True)
       else:
          application = webapp.WSGIApplication([('/', MainHandler),], debug=True)
    
       run_wsgi_app(application)
    
    
    if __name__ == '__main__':
       main()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      • 2015-01-30
      • 2011-05-06
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      相关资源
      最近更新 更多