如何在服务器上访问wsgi站点的多个副本

时间:2014-10-14 01:52:20

标签: apache flask wsgi

我有一个Flask网站在apache服务器上提供服务,现在想在同一台服务器(不同的svn分支)上运行另一个代码库副本以进行测试。因此,我已将代码库安装在服务器上的不同位置,并将另一个引用测试代码库的WSGIScriptAlias条目添加到apache conf文件中:

# Entry point for the user web interface:
WSGIScriptAlias /mysite /blah/blah/wsgi_entry.py

# Entry point for the test branch of the user web interface:
WSGIScriptAlias /mysiteTEST /blah/blah/testBranch/wsgi_entry.py

我希望将浏览器发送到" mysiteTEST"而不是通常的" mysite"我会让我在测试分支中运行代码。然而,它运行原始代码,大概是因为wsgi_entry.py只是做了类似的事情:

from my_main_module import app as application

并且它在寻找my_main_module的地方可能是apache配置中设置的python路径,如下所示:

WSGIPythonPath /blah/blah/main_code_place

哪个主网站是正确的,但我想让mysiteTEST在测试分支位置运行模块。所以也许我可以在testBranch / wsgi_entry.py中以某种方式覆盖python路径(也许不是?),但是有一种更简单的方法可以在apache配置中管理它吗?即我可以以某种方式为/ mysite指定一个WSGIPythonPath,为/ mysiteTEST指定另一个吗?

2 个答案:

答案 0 :(得分:0)

设置多个虚拟主机:

<VirtualHost your.ip:80>
ServerName blahblah
ServerAdmin blahblah@blah.com
WSGIDaemonProcess blahblah user=b group=lah threads=5
WSGIScriptAlias /mysite /blah/blah/wsgi_entry.py

<Directory /blah/blah>
    Options Indexes FollowSymLinks Includes ExecCGI
    WSGIScriptReloading On
    WSGIProcessGroup blahblah
    WSGIApplicationGroup %{GLOBAL}
    Order allow,deny
    Allow from all
</Directory>
</VirtualHost>

<VirtualHost your.ip:80>
ServerName blahblahTEST
ServerAdmin blahblah@blah.com
WSGIDaemonProcess blahblahtest user=b group=lah threads=5
WSGIScriptAlias /mysiteTEST /blah/blah/testBranch/wsgi_entry.py

<Directory /blah/blah/testBranch>
    Options Indexes FollowSymLinks Includes ExecCGI
    WSGIScriptReloading On
    WSGIProcessGroup blahblah
    WSGIApplicationGroup %{GLOBAL}
    Order allow,deny
    Allow from all
</Directory>
</VirtualHost>

答案 1 :(得分:0)

我最后通过添加一行来修改替换代码版本的wsgi入口点中的路径(即apache配置行中引用的文件&#34; WSGIScriptAlias / mysiteTEST / blah / blah / testBranch) /wsgi_entry.py"在我的例子中)。该行将覆盖wsgi配置的python搜索路径。不是我想要的apache配置解决方案,但它只是一行添加而且它完成了工作:

import sys
sys.path.insert(0, '<path for alternate code modules>')    
from my_main_module import app as application