【发布时间】:2018-12-05 14:04:23
【问题描述】:
我有一个 Django 应用程序在 Centos 7.5 上运行,带有 Apache 2.4 和 mod_wsgi 4.6.4。我很难让 mod_wsgi 使用我希望它使用的虚拟环境。我通过 yum 安装了 Python 3.6 并用它来创建一个虚拟环境。我从源代码编译了 mod_wsgi,使用 with-python 选项将其指向正确的 Python 二进制文件。我希望工作但不起作用的(近似)Apache 配置如下:
# Required because of some third-party packages that use the
# simplified GIL state API
WSGIApplicationGroup %{GLOBAL}
<VirtualHost *:80>
WSGIDaemonProcess myapp python-home=/path/to/venv python-path=/path/to/my/app
WSGIProcessGroup myapp
WSGIScriptAlias / /path/to/my/app/wsgi.py
</VirtualHost>
<VirtualHost *:443>
WSGIProcessGroup myapp
WSGIScriptAlias / /path/to/my/app/wsgi.py
</VirtualHost>
此配置找不到虚拟环境中安装的任何软件包。转储 sys.path 表明该路径不包含预期的 /path/to/venv/lib/python3.6/site-packages ,而是 /lib/python3.6/site-packages (即系统目录)。我能够让我的应用运行的唯一方法是将WSGIDaemonProcess 指令更改为:
WSGIDaemonProcess myapp python-path=/path/to/my/app:/path/to/venv/lib/python3.6/site-packages
第一个配置(推荐使用python-home)在 macOS 10.12 上使用 Python 3.6 和 mod_wsgi 4.5.24 对我有用。这两个环境之间的一个很大区别是在 CentOS 服务器上启用了 SELinux,但 audit2allow 没有显示任何可以解释我的问题的内容。
【问题讨论】:
-
将
LogLevel设置为info甚至debug。设置WSGIVerboseDebugging On。并通过modwsgi.readthedocs.io/en/develop/user-guides/… 并使用各种检查来验证您的设置。这告诉了你什么额外的信息。
标签: python django centos mod-wsgi