Python + Apache:WSGIPythonPath相对路径

时间:2014-10-22 21:59:06

标签: python django apache flask mod-wsgi

我在Windows下设置了Flask应用程序。在我的httd.conf文件中,我包含了我的应用程序的conf文件,它位于这样的目录中:

C:\prod\apps\my_app\
                    \my_app
                        my_app.conf
                        my_app.py
                        my_app.wsgi
                    \my_service
                    \my_data
                    \my_python_virtual_env

我能够在Apache中配置它并使用my_app.conf中的WSGIPythonPath的绝对路径使其正常运行。但是,我无法使用WSGIPythonPath的相对路径。基于上述结构,我认为它应该是这样的:

WSGIPythonPath ../my_app;../my_service;../my_data;../my_python_virtual_env
<Directory "/">
    Require all granted
</Directory>

然而,这显然不是apache如何解释这些相对路径的根。我可以做什么,如果没有,还有关于如何使其发挥作用的任何其他建议吗?为部署到的各种环境配置一个conf文件会很棒。

1 个答案:

答案 0 :(得分:1)

您需要详细了解WSGImodwsgi如何与Apache协同工作以及最佳做法。

首先,您应该在隔离的virtualenv中构建Flask应用程序。这是任何基于Python的Web应用程序的最佳实践,无论是Flask,Django等等。使用pip管理您的包裹。谷歌这两个术语,你会得到关于如何做的多个教程。

然后,您应该将Flask应用配置放在专用端口上的Apache命名虚拟主机中。您需要确保WSGIDaemonProcess包含指向Flask网站包的virtualenv特定python-path变量。

您还应该创建一个系统Flask用户和组,以将Flask系统与其他所有系统隔离开来。这样更安全。

下面列出的是一个示例配置。注意我已经创建了一个特定的flask-main用户和flask-main组,我将所有流量指向我的Flask应用程序到端口8789.

#####
# START: Flask App
WSGISocketPrefix /var/run/wsgi
Listen 8789    
NameVirtualHost *:8789
<VirtualHost *:8789>
    DocumentRoot /path/to/www/
    ErrorLog "/path/to/logs/httpd/flask-8789-error_log"
    LogLevel info 
    ProxyRequests Off
    WSGIDaemonProcess flask-main user=flask-main group=flask-main display-name=%{GROUP} python-path=/path/to/www:/path/to/lib/python2.6/site-packages
    WSGIProcessGroup flask-main
    WSGIScriptAlias / /path/to/www/mygateway.wsgi process-group=flask-main application-group=%{GLOBAL}
    <Directory /path/to/www>
        WSGIProcessGroup run
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
    <Directory /path/to/www/static>                                                        
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

我希望这能帮助你朝着正确的方向前进。