mod_wsgi django 无法与 Apache24 一起使用

问题描述 投票:0回答:2

我正在使用运行 Python 3.11 的 MS Windows 11 计算机,并安装了

virtualenv
软件包。

我正在使用

Apache24
httpd.exe
Web 服务器作为我的
django
应用程序生产服务器。

我的应用程序称为

mysite
,它在虚拟环境(称为
venv
)内功能齐全,具有以下软件包(requirements.txt):

django
django-extensions
django-iprestrict
mod-wsgi
Pillow
pyOpenSSL
odfpy
werkzeug
whitenoise
pandas
plotly
matplotlib

我可以在激活虚拟环境的情况下以 DEBUG 模式完全运行服务器:

(venv) python.exe manage.py runserver

另一方面,我能够让

Apache
Web 服务器毫无问题地运行测试网站。

问题是当我编辑

httpd.conf
文件以与我的 django 应用程序集成时
mod_wsgi
:

# httpd.conf

(...)

LoadFile "C:/Users/myuser/AppData/Local/Programs/Python/Python311/python311.dll"
LoadModule "C:/Users/myuser/mysite/mysite_venv/venv/Lib/site-packages/mod_wsgi.cp311-win_amd64.pyd"

WSGIScriptAlias / C:\Users\myuser\mysite\mysite\wsgi.py
WSGIPythonHome C:\Users\myuser\mysite\mysite_venv\venv
WSGIPythonPath C:\Users\myuser\mysite

<Directory />
<Files wsgi.py>
Require all granted
</Files>
</Directory>

# media files hosting

Alias /media "C:/Users/myuser/mysite/media/"

<Directory "C:/Users/myuser/mysite/media/">
Require all granted
</Directory>

(...)

我的目录树是:

.
├── mainapp
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── __init__.py
│   ├── migrations
│   ├── models.py
│   ├── static
│   ├── templates
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── mainapp.sqlite3
├── manage.py
├── media
├── mysite
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── mysite_venv
│   ├── requirements.txt
│   ├── venv
└── staticfiles
    ├── admin
    ├── css
    ├── django_extensions
    ├── font
    ├── icon
    ├── javascript
    ├── js
    └── uploads

问题是当我运行

httpd.exe
时,网页会永远加载,因为服务器不响应客户端。

我已打开

error.txt
中的
Apache
日志文件以了解发生了什么情况,但有任何错误消息。

我关心的是:

  • PYTHONPATH
    环境变量设置为 DLL,如 此处所述
  • 本地编译并将
    mod_wsgi
    .pyd
    放置在正确的路径中。

有人可以帮我看看发生了什么事吗?预先感谢!

python-3.x django windows apache mod-wsgi
2个回答
0
投票

模块

plotly
mod_wsgi
之间存在一些问题/冲突,当 Apache24 通过 WSGI 加载
plotly
模块时,HTTP/S 请求会被卡住。

同样的事情也发生在

pandas
模块上。

我可以通过评论加载这些模块的所有

views
urls
来解决这个问题。

virtualenv
安装这些模块没有问题,问题是
mod_wsgi
无法加载它们。

最大的问题是开发服务器通过

python manage.py runserver
与他们一起工作,问题正是当你将服务器置于生产模式时。


0
投票

我有类似的问题,但使用的是 Flask 框架。我不认为它与 Django 或 Flask 有任何关系,但这是 Windows 本身上的 Python 和 Apache 2.4 的问题。 在 Windows 上安装 Apache2.4.57 后,它会以默认网页启动。完全没有问题。

当我使用 pip install mod-wsgi 将 wsgi 模块安装到 Python 时,一切正常。 wsgi-mod 已正确编译并安装。

当我修改httpd.conf文件时:

加载文件“c:/python311/python311.dll” LoadModule wsgi_module“c:/ python311 / lib / site-packages / mod_wsgi / server / mod_wsgi.cp311-win_amd64.pyd” WSGIPythonHome“c:/python311/”

然后再次启动 httpd.exe,它失败并出现以下错误: httpd.exe:C:/Apache24/conf/httpd.conf 第 192 行存在语法错误:无法将 c:/python311/python311.dll 加载到服务器中:%1 不是 Win32 应用程序。

这是什么意思?我还需要配置什么吗?

© www.soinside.com 2019 - 2024. All rights reserved.