504页后的apache错误
[info] mod_wsgi (pid=): Python home /var/venv/mybox.
[info] mod_wsgi (pid=): Initializing Python.
ImportError: No module named site
这是一个几乎没有配置的应用程序。
<IfModule mod_wsgi.c>
WSGIDaemonProcess myapp python-home=/var/venv/mybox
WSGIProcessGroup myapp
WSGIScriptAlias / /var/www/html/web/myapp/wsgi.py
WSGISocketPrefix /var/run/wsgi
<Directory /var/www/html/web>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
</IfModule>
关注每一篇文章和教程。我在CENTOS6上。使用virutal env python 2.7默认系统env是2.6
$ ldd /etc/httpd/modules/mod_wsgi.so
linux-vdso.so.1 => (0x00007ffc06174000)
mywsgi.py
import os,sys
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
sys.path.insert(0,'/var/www/html/web')
activate_this = '/var/venv/mybox/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
application = get_wsgi_application()
没有设置PYHTONHOME
答案 0 :(得分:4)
可以在以下位置找到使用mod_wsgi的虚拟环境的文档:
在您的案例中最重要的是以下部分:
在该部分中说明:
当使用带有mod_wsgi的Python虚拟环境时,使用与最初编译mod_wsgi相同的Python安装来创建它是非常重要的。不可能使用Python虚拟环境来强制mod_wsgi使用不同的Python版本,甚至是不同的Python安装。
当mod_wsgi最初是为Python 2.7编译的时候,你不能强迫mod_wsgi使用Python 3.5创建的Python虚拟环境。这是因为最初编译的Python安装的Python库直接链接到mod_wsgi模块。
所以最有可能的是mod_wsgi是为Python 2.6编译的。在这种情况下,您不能强制它使用从Python 2.7创建的Python虚拟环境。执行此操作时,您将收到有关site
模块丢失的错误。
您需要从系统软件包中卸载该mod_wsgi,并从源代码安装mod_wsgi,并根据Python 2.7进行编译。最简单的方法可能是使用pip install
方法,如下所述:
运行pip install
将其安装到您的虚拟环境中,然后按照“连接到Apache安装”部分中的说明进行操作。关于配置Apache以使用它。
答案 1 :(得分:2)
我的整个服务器都使用Python 2.7,但是我已经安装了Python 3.6,而我的virtualenv正在使用Python 3.6。
使用以下代码配置djang.conf(/etc/httpd/conf.d/django.conf)后:
<VirtualHost *:80>
WSGIDaemonProcess myProj python-home=/home/user/django-site/env python-path=/home/user/django-site
WSGIProcessGroup myProj
WSGIScriptAlias /myProj /home/user/django-site/my-project/wsgi.py
Alias /static /home/user/django-site/static
<Directory /home/user/django-site/static>
Require all granted
</Directory>
<Directory /home/user/django-site/my-project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
然后重新启动我的Apache
sudo systemctl restart httpd
我收到此错误一千行(/ var / log / httpd / error_log)
ImportError: No module named site
ImportError: No module named site
ImportError: No module named site
ImportError: No module named site
第一:
sudo grep wsgi /var/log/httpd/error_log
我明白了:
[mpm_prefork:notice] [pid 62324] AH00163: Apache/2.4.6 (CentOS) PHP/7.0.33 mod_wsgi/3.4 Python/2.7.5 configured -- resuming normal operations
请注意Python版本(2.7.5)。我根据Python 3.6获取mod_wsgi所做的工作是使用:
yum list *mod_wsgi*
Installed packages
mod_wsgi.x86_64 3.4-18.el7 @base
Disponible packages
python35u-mod_wsgi.x86_64 4.6.2-1.ius.centos7 ius
python36u-mod_wsgi.x86_64 4.6.2-1.ius.centos7 ius
然后我安装了软件包python36u-mod_wsgi.x86_64:
sudo yum install python36u-mod_wsgi.x86_64
然后我重新启动了Apache服务:
sudo systemctl restart httpd
并从日志中获得了这一行:
[Fri Mar 29 12:33:26.788716 2019] [mpm_prefork:notice] [pid 76317] AH00163: Apache/2.4.6 (CentOS) PHP/7.0.33 mod_wsgi/4.6.2 Python/3.6 configured -- resuming normal operations
答案 2 :(得分:1)
从Documentation开始 写这个: WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py WSGIPythonPath /path/to/mysite.com
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
这是专门针对虚拟环境,您需要编写python虚拟环境的网站包的路径:
WSGIPythonPath /path/to/mysite.com:/path/to/your/venv/lib/python3.X/site-packages
问题也可能在 -
PYTHONHOME
更改标准Python库的位置。默认情况下 在前缀/ lib / pythonversion和中搜索库 exec_prefix / lib / pythonversion,其中prefix和exec_prefix是 依赖于安装的目录,默认为/ usr / local。
当PYTHONHOME设置为单个目录时,其值将替换两者 前缀和exec_prefix。要为这些指定不同的值,请设置 PYTHONHOME前缀:exec_prefix。
尝试清理PYTHONHOME
:
user$ export PYTHONHOME=
答案 3 :(得分:1)
在Ubuntu上,如果要使用python3,则必须卸载libapache2-mod-wsgi-py
并安装libapache2-mod-wsgi-py3
(如果您从存储库中获得了mod_wsgi)。
答案 4 :(得分:1)
我使用的是 python 2.7 的 centos6.X,重新安装 mod_wsgi 已经为我解决了这个问题。
yum remove mod_wsgi.x86_64
yum install mod_wsgi.x86_64
/etc/init.d/httpd restart