Настройте приложение GAE app.yaml для поддоменов - PullRequest
3 голосов
/ 16 февраля 2011

У меня есть несколько поддоменов с моим доменом на 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 ]

8 голосов
/ 16 февраля 2011

Это не совсем ответ на ваш вопрос, но вы можете посмотреть webapp2 . Это замена для веб-приложения Google, которое добавляет некоторые действительно полезные функции, в том числе новую систему маршрутизации, которая может маршрутизировать по доменам.

Посмотрите файл rout.py для примеров. Вы бы хотели DomainRoute:

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

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

Ник Джонсон написал пост в блоге о webapp2 некоторое время назад.

1 голос
/ 16 февраля 2011

Вероятно, самый простой способ - импортировать соответствующий модуль и вызвать его функцию main(), а также выполнять все приложения WSGI в отдельных модулях, а не в main.py. (Моя собственная микросхема выполняет всю эту маршрутизацию в самом приложении WSGI, что выглядит довольно уродливо до такой степени, что я переосмысливаю свой выбор придерживаться в основном расширенной маршрутизации в стиле веб-приложения.)

В вашем заголовке упоминается app.yaml; вы хотите просто настроить все ваши запросы, чтобы они заходили в main.py и выполняли диспетчеризацию там, поскольку текущая среда выполнения вообще не позволяет вам отображать хосты в app.yaml (хотя существует открытая проблема с просьбой, чтобы вы могли пометить звезду). К сожалению, это означает, что у вас есть выбор: не использовать статические обработчики или иметь одинаковые URL-адреса статического содержимого на всех ваших поддоменах.

...