获取Django Apache Mysql WSGI使用python 3.4 virtualenv在具有在全局python2.7下运行的pre-exisiting flask app的机器上工作

时间:2017-02-15 12:05:48

标签: mysql django apache python-3.4 mod-wsgi

我在mac mini上设置了一个运行apache 2.4,mod wsgi,python 2.7的烧瓶应用程序。它提供了一些有用的数据,我的团队用它来监控我们的项目。

我最近开发了一个带有MySQL数据库后端的Django应用程序,它在python 3.4虚拟环境中的测试服务器下运行得非常好,Django 1.10和PyMySQL以及通过pip安装的mysqlclient但我无法在apache下运行

我的Apache虚拟服务器配置如下:

WSGIScriptReloading On

    <VirtualHost *>
        ServerName <server_name>
        ServerAlias <project_name>
        ServerAdmin <myEmail>
        LogLevel info

       # This is the WSGI daemon process for the existing python 2.7/flask project
       # Even if I comment this bit out, the Django project still won't work
        WSGIDaemonProcess theApp user=_www  group=staff threads=5
        WSGIScriptAlias /app1 /path/to/theApp/apache/wsgi.py
        <Directory "/path/to/theApp/apache">
            WSGIProcessGroup app1
            WSGIApplicationGroup %{GLOBAL}
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>

       # This is the WSGI daemon process for my django app - I've anonymised it
       # a bit but I am confident the paths used are correct

         WSGIDaemonProcess djangoApp user=_www group=staff processes=2 threads=15 python-path=/path/to/djangoApp:/path/to/virtualenvs/env34 display-name=%{GROUP}
         WSGIProcessGroup djangoApp
         WSGIApplicationGroup %{GLOBAL}
         WSGIScriptAlias /djangoApp /path/to/djangoApp/djangoApp/wsgi.py
         <Directory /path/to/djangoApp/djangoApp>
              <Files wsgi.py>
                  Require all granted
              </Files>
         </Directory>

    </VirtualHost>

httpd.conf中有一行:

LoadModule wsgi_module /Library/Python/2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so

用以下行代替:

LoadModule wsgi_module /path/to/.virtualenvs/env34/lib/python3.4/site-packages/mod_wsgi/server/mod_wsgi-py34.so

打破现有的python 2.7 / Flask应用程序并且无法修复我的Django应用程序

Apache错误日志有一些值得注意的错误:

'/path/to/djangoApp/djangoApp/wsgi.py' cannot be loaded as Python module.

ImportError: No module named django.core.wsgi

所以,通过查看其他问题,我得到的印象是运行基于python3.4的应用程序和为python 2.7编译的wsgi存在问题,但鉴于此应用程序在django测试服务器和虚拟环境下运行正常,我无法感觉必须有一种方法可以在生产服务器下实现它。

非常感谢您的帮助

PJ

1 个答案:

答案 0 :(得分:0)

读:

您应该避免使用python-path来引用Python虚拟环境。对于您尝试使用python-path的方式,它将无法正确使用它。