托管金字塔webapps在子路径下

Nig*_*gel 3 python hosting pyramid

我们有一个托管设置,我们有一个顶级域名,我们在子路径下托管Web应用程序.例如:

  /projects -> Plone
  /interal -> Tomcat
  etc

在这种情况下,我们需要一种方法来告诉后端的Web应用程序它的基本路径是什么,以便它可以正确地生成其视图和静态内容的链接.对于上面的例子,这很好.

我们刚刚开始使用由女服务员服务的金字塔,但到目前为止我们还没弄清楚如何做到这一点.是否有一种干净的方式在Waitress中配置此基本路径,或者是否有一个更灵活的应用服务器,我们可以使用它来支持Pyramid?

Mic*_*kel 5

WSGI中的所有内容都与当前请求相关.您只需要environ正确设置(通常由WSGI服务器).

例如,您的Web应用程序将知道它已安装在子路径/projectsif request.environ['SCRIPT_NAME'] == '/projects'.如果您希望应用程序与其挂载点无关,则可以简单地对其进行编码,就像它在视图中一样/foo/bar.然后你/projects通过一些可以environ正确改变的中间件安装你的应用程序(mod_wsgi和其他一些服务器应该能够自动为你做这个).现在,当输入的URL是/projects/foo/barenviron['SCRIPT_NAME'] == '/projects'environ['PATH_INFO'] == '/foo/bar',和你的应用程序可以将精力集中在相对路径上.

在Pyramid中,这可以归结为你的ini中的一个额外步骤,在那里你将前缀中间件添加到你的WSGI堆栈.中间件处理为你改变PATH_INFOSCRIPT_NAMEenviron.

[app:myapp]
use = egg:myapp

# ...

[filter:proxy-prefix]
use = egg:PasteDeploy#prefix
prefix = /projects

[pipeline:main]
pipeline =
    proxy-prefix
    myapp
Run Code Online (Sandbox Code Playgroud)