为子域配置GAE应用的app.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.py
、projects.py
和docs.py
这样的文件。谢谢!
2 个回答
1
最简单的方法可能就是导入合适的模块,然后调用它的 main()
函数,把所有的 WSGI 应用创建放在单独的模块里,而不是在 main.py 里。(我自己的微框架就是在 WSGI 应用内部处理所有的路由,这样做有点乱,甚至让我开始考虑是不是应该放弃这种扩展的 webapp 风格的路由方式。)
你提到的标题里有 app.yaml;你需要把所有请求配置到 main.py,然后在那儿进行分发,因为现在的运行环境根本不允许你在 app.yaml 里做主机映射(不过有一个 公开的问题在请求这个功能,你可以给它点个星)。这不幸的是意味着你只能选择不使用静态处理程序,或者在所有子域名上使用相同的静态内容 URL。
8
这不是直接回答你问题的内容,但你可以看看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曾经写过一篇关于webapp2的博客文章。