【发布时间】:2012-03-31 12:27:27
【问题描述】:
我试图做的是根据请求域加载不同的应用程序(webapp2.WSGIApplication)。
例如 www.domain_1.com 应该加载 app1.main.application 中的应用程序,而 www.domain_2.com 应该加载 app2.main.appplication。
当然,我在同一个 GAE appid 上,并且我使用命名空间来分隔应用程序数据。
这对 'threadsafe:false' 和 runner.py 文件非常有效,其中函数确定要返回哪个应用程序
似乎使用“threadsafe:true”,第一个请求将 wsgiapplication 加载到实例中,并且进一步的请求不再执行“应用程序调度”逻辑,因此请求从错误的应用程序获得响应。
我使用 python2.7 和 webapp2
最好的方法是什么?
编辑:
我的 runner.py 的一个非常简化的版本
def main():
if domain == 'www.mydomain_1.com':
from app_1 import application
namespace = 'app_1'
elif domain == 'www.domain_2.com':
from app_2 import application
namespace = 'app_2'
namespace_manager.set_namespace(namespace)
return wsgiref.handlers.CGIHandler().run(application)
if __name__ == '__main__':
main()
在 app.yaml 中
- url: /.*
script: app-runner.py
【问题讨论】:
-
您的应用程序代码和逻辑对于 2 个域是不同的,还是只是您尝试使用命名空间实现分离的数据存储区?
-
逻辑不同,否则通过设置不同的命名空间很容易完成。
-
那么您在 runner.py 中有一个 WSGI 应用程序,它将请求分派给几个 WSGI 应用程序之一? “内部”应用程序是否存储在覆盖调度逻辑的全局中?
-
@DanSanderson 我编辑了问题并添加了 runner.py
标签: google-app-engine python-2.7 wsgi