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

时间:2011-02-16 11:32:57

标签: python google-app-engine yaml

我在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的内容? 谢谢!

2 个答案:

答案 0 :(得分:8)

这不是您问题的答案,但您可能需要查看webapp2。它是谷歌网络应用的直接替代品,增加了一些非常有用的功能,包括可以按域路由的新路由系统。

查看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一段时间前写了关于webapp2的a blog post

答案 1 :(得分:1)

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

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