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

Posted

技术标签:

【中文标题】Apache2 上的 Django:问题 in.conf 文件?【英文标题】:Django on Apache2: Issue in.conf-file? 【发布时间】:2021-02-26 18:06:09 【问题描述】:

大家好,

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

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

./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,尽管我的管理员安装了版本 3.7。对于 python 3x,安装的 mod_wsgi 是“libapache2-mod-wsgi-py3”!这也会是个问题吗?

谢谢大家,祝大家有个美好的一天!

【问题讨论】:

你能给我们看看wsgi.py文件吗? @cizario 对不起,我忘了,现在添加!非常感谢您的努力! 【参考方案1】:

我认为您应该首先激活虚拟环境,这就是为什么您得到默认版本的 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 存储库:https://github.com/dcreager/virtualenv/blob/master/virtualenv_support/activate_this.py 下载activate_this.py 脚本并将其放在venv/bin 下(或者venv/Scripts,如果你在windows),因为它没有附带(因为它不是它的官方部分)

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

【讨论】:

非常感谢!等明天去试试!但有趣的是:我发现没有任何在线教程或文档提到这个话题!无论如何...谢谢! 如果我的回答解决了您的问题,请告诉我@finethen 抱歉,差点忘了:这个解决方案解决了我的问题!谢谢! @cizario

以上是关于Apache2 上的 Django:问题 in.conf 文件?的主要内容,如果未能解决你的问题,请参考以下文章

最近在虚拟机上想配置apache2 上的django时提示mod_python error本地服务器遇到的问题

Windows 上的 Apache 2.4、Python 和 Django

Django - Apache2 - Postgresql:_psycopg 出错

如何在 ubuntu 上为 django restful 服务配置 apache2

Windows 上的 Django 1.6.1 + MySQL + Apache 2.4.7。可能吗? [关闭]

CentOS7下 将django工程部署到Apache2.4上