我不熟悉基于 Django 的应用程序,并尝试使用以下配置部署 Django 项目,这些配置几乎与 Django 文档中给出的默认设置类似。
apache2.conf
# WSGI Configuration
WSGIDaemonProcess demo python-path=/home/inian/Documents/demo
WSGIProcessGroup demo
WSGIScriptAlias / /home/inian/Documents/demo/demo/wsgi.py process-group=demo
<Directory /home/inian/Documents/demo/demo>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
# Serving static files
Alias /static/ /home/inian/Documents/demo/static/
<Directory /home/inian/Documents/demo/static>
Require all granted
</Directory>
当我启动 apache 服务器时,它正常启动,但由于 python 版本不匹配而在加载我的项目时出现运行时错误,如下所示。
/var/log/apache2/error.log
[Sun Apr 10 20:38:16.165536 2016] [wsgi:warn] [pid 22959] mod_wsgi: Compiled for Python/2.7.11.
[Sun Apr 10 20:38:16.165551 2016] [wsgi:warn] [pid 22959] mod_wsgi: Runtime using Python/2.7.10.
[Sun Apr 10 20:38:16.166787 2016] [mpm_prefork:notice] [pid 22959] AH00163: Apache/2.4.7 (Ubuntu) OpenSSL/1.0.1f mod_wsgi/4.5.1 Python/2.7.10 configured -- resuming normal operations
我希望我的应用程序使用安装在 /usr/local
位置的 python,版本是 2.7.11
,这是我用来编译和安装的版本 mod_wsgi
,但是为了安全起见,我还检查了 /usr/bin/python -V
,它给出的输出为 Python 2.7.6
。这带来了两个问题:
我如何从安装位置
/usr/local/bin/python
指向 apache 使用 Python 2.7.11(我一直将其用作服务器上所有内容的默认值).我不记得曾经安装过 2.7.10 或对它做过任何事情,所以我不知道 apache 是如何以及从哪里加载和使用它的。如果有人能指导我实现这一点,那就太好了。
最佳答案
在针对特定 Python 安装编译 mod_wsgi 然后升级 Python 安装的情况下,这是一条警告消息。由于共享库的工作方式,它通常无关紧要。这记录在:
在你的情况下,虽然问题是你的 mod_wsgi 没有针对 Python 的安装进行编译,但它正在运行时找到 Python 共享库。这可能会导致各种问题,其中一个是两个 Python 安装没有安装兼容的编译器标志集,例如 Unicode 字符宽度的编译器标志。
所以在我看来基本上问题就像你从源代码编译 mod_wsgi 针对/usr/local 中的 Python 安装,但是因为它的构建方式对于那个场景不正确,所以在运行时它发现 Python shared安装到/usr 中的版本的库。
有关如何在 Linux 系统上正确安装 Python 的大讨论,请阅读:
接下来,当您从源代码编译 mod_wsgi 时,请确保设置 LD_RUN_PATH
环境变量以包含安装备用 Python 安装的 Python 共享库的库目录。该环境变量将允许 mod_wsgi 在运行时找到正确的库,而不使用/usr/lib 中的版本。
您可以按照以下文档中的说明验证它是否找到了错误/正确的:
最后,一旦您安装了 mod_wsgi 并找到了正确的共享库,您可能还必须在 Apache 配置中设置 WSGIPythonHome
指令,以便它为运行时文件找到正确的 Python 安装。文档中对此进行了描述:
关于python - Django 部署 : configuring correct python to be used by apache/mod_wsgi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36529986/