Apache2 上的 Django:问题 in.conf-文件?

Django on Apache2: Issue in.conf-file?

大家好,

与我们公司的管理员一起,我们正尝试与 mod_wsgi 一起在 Apache2 上部署 Django,但我们面临一些小问题。我希望你们中的一些人可以帮忙看看下面几行!?

现在,我们服务器上的目录如下所示:

./var/www/
        |-- myproject
            |-- manage.py
            |-- project/
                |-- __init__.py
                |-- settings.py
                |-- urls.py
                |-- wsgi.py
            |-- statics
            |-- venv

当我尝试打开网站时,它一直在加载,但没有任何反应!我想知道我们的 .conf 文件中的数据是否有误!

<VirtualHost *:80>
. . .

Alias /static /var/www/myproject/static
<Directory /var/www/myproject/static>
    Require all granted
</Directory>

<Directory /var/www/myproject/project>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

WSGIDaemonProcess myproject python-path=/var/www/myproject python-home=/var/www/myproject/venv
WSGIProcessGroup myproject
WSGIScriptAlias / /var/www/myproject/project/wsgi.py

</VirtualHost>

如果我理解正确的话,“WSGIDaemonProcess”里面的“python-home”应该指向我的虚拟环境收集必要的组件和“python-path”到我的项目!?

import os 
import time 
import traceback 
import signal 
import sys 

from django.core.wsgi import get_wsgi_application 

sys.path.append('/var/www/myproject/project')
sys.path.append('/var/www/myproject/venv/lib/python3.7/site-packages') 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings") 

try: 
    application = get_wsgi_application() 
except Exception: 
    # Error loading applications 
    if 'mod_wsgi' in sys.modules: 
        traceback.print_exc() 
        os.kill(os.getpid(), signal.SIGINT) 
        time.sleep(2.5) 

第二个“sys.get.append”是否必须指向我的 venv 或我们的管理员安装的位置实际 python-version(3.7)?

我还注意到,服务器上当前的 运行 python 版本是 2.7.6,尽管我的管理员安装了 [=30] =]3.7。安装的 mod_wsgi 是“libapache2-mod-wsgi-py3” for python 3x!这也会是个问题吗?

谢谢,祝大家有个愉快的一天!

我认为你应该首先激活虚拟环境,这就是为什么你得到了 python 的默认版本 2.7.6 而不是预期的 3.7,为此,你必须在你的wsgi.py 文件在最上面

activate_this = '/var/www/myproject/venv/bin/activate_this.py'
exec(open(activate_this).read(), dict(__file__=activate_this))
[..]

参考这个话题https://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html#daemon-mode-multiple-applications

备注

既然您选择了 venv 而不是 mkviratualenv 最简单的选择是从 virtualenv 存储库下载 activate_this.py 脚本 :https://github.com/dcreager/virtualenv/blob/master/virtualenv_support/activate_this.py 并将其放在venv/bin(或者 venv/Scripts 如果你在 windows)因为它没有附带(因为它不是它的官方部分)

有关更多详细信息,请参阅此线程 How can I activate a pyvenv vitrualenv from within python? (activate_this.py was removed?)