为子域配置 GAE 应用程序 app.yaml

Posted

技术标签:

【中文标题】为子域配置 GAE 应用程序 app.yaml【英文标题】:Configure GAE application app.yaml for subdomains 【发布时间】:2011-06-28 07:16:46 【问题描述】:

我的域在 GAE 上有一些子域。例如,它们是 blog.mysite.com、projects.mysite.com 和 docs.mysite.com。按照现在的配置,它们都在main.py中使用这样的设置进行处理:

def main():
    applications = 
        'blog.mysite.com': webapp.WSGIApplication([('/', BlogHandler)]),
        'projects.mysite.com': webapp.WSGIApplication([('/', ProjectsHandler)]),
        'docs.mysite.com': webapp.WSGIApplication([('/', DocsHandler)]),
    
    util.run_wsgi_app(applications[os.environ['HTTP_HOST']])

如何将这些子应用程序分开以由不同的模块处理,所以我会有blog.pyprojects.pydocs.py 之类的东西? 谢谢!

【问题讨论】:

【参考方案1】:

这并不完全是您问题的答案,但您可能想查看webapp2。它是谷歌 webapp 的直接替代品,添加了一些非常有用的功能,包括可以按域路由的新路由系统。

查看routes.py 文件以获取示例。你会想要DomainRoute:

    SUBDOMAIN_RE = '^([^.]+)\.app-id\.appspot\.com$'

    app = WSGIApplication([
        DomainRoute(SUBDOMAIN_RE, [
            Route('/foo', 'FooHandler', 'subdomain-thing'),
        ]),
        Route('/bar', 'BarHandler', 'normal-thing'),
    ])

Nick Johnson 不久前写了a blog post 关于 webapp2。

【讨论】:

【参考方案2】:

可能最简单的方法是导入适当的模块并调用其main() 函数,然后在单独的模块中而不是在 main.py 中创建所有 WSGI 应用程序。 (我自己的微框架在 WSGI 应用程序本身内完成所有这些路由,这有点难看,以至于我正在重新考虑我选择坚持基本扩展的 webapp 风格的路由。)

你的标题提到了 app.yaml;您只想将所有请求配置为转到 main.py 并在那里进行调度,因为当前运行时根本不允许您在 app.yaml 中进行主机映射(尽管有一个 open issue 请求这个你可以明星)。不幸的是,这意味着您只能选择不使用静态处理程序或在所有子域上使用相同的静态内容 URL。

【讨论】:

以上是关于为子域配置 GAE 应用程序 app.yaml的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flask-Restless 进行 GAE app.yaml 路由

GAE 自定义域通配符子域问题

如何在 Google App Engine 的 app.yaml 文件中配置 servlet 过滤器?

GAE app.yaml:如何设置包含句点的环境变量?

如何使用 app.yaml 在 GAE(python) 中上传静态文件?

Google App Engine 静态文件服务与应用程序冲突