带有 apache 的 wsgi 无法读取管道安装的 python 包
Posted
技术标签:
【中文标题】带有 apache 的 wsgi 无法读取管道安装的 python 包【英文标题】:wsgi with apache is not able to read piped installed python packages 【发布时间】:2019-09-08 17:45:49 【问题描述】:我得到这个错误:
sudo service apache2 restart :
[Thu Apr 18 13:11:02.687353 2019] [mpm_event:notice] [pid 2135:tid 140232732096384] AH00491: caught SIGTERM, shutting down
[Thu Apr 18 13:11:03.694739 2019] [ssl:warn] [pid 2300:tid 139990910658432] AH01909: ip-*.*.*.*.ec2.internal:443:0 server certificate does NOT include an ID which matches the server name
[Thu Apr 18 13:11:03.702921 2019] [ssl:warn] [pid 2301:tid 139990910658432] AH01909: ip-*.*.*.*.ec2.internal:443:0 server certificate does NOT include an ID which matches the server name
[Thu Apr 18 13:11:03.703014 2019] [wsgi:warn] [pid 2301:tid 139990910658432] mod_wsgi: Compiled for Python/2.7.11.
[Thu Apr 18 13:11:03.703018 2019] [wsgi:warn] [pid 2301:tid 139990910658432] mod_wsgi: Runtime using Python/2.7.12.
然后我进入我们站点的域并进入/var/log/apache2/error.log:
[Thu Apr 18 13:11:03.703598 2019] [mpm_event:notice] [pid 2301:tid 139990910658432] AH00489: Apache/2.4.18 (Ubuntu) OpenSSL/1.0.2g mod_wsgi/4.3.0 Python/2.7.12 configured -- resuming normal operations
[Thu Apr 18 13:11:03.703617 2019] [core:notice] [pid 2301:tid 139990910658432] AH00094: Command line: '/usr/sbin/apache2'
[Thu Apr 18 13:11:10.014862 2019] [wsgi:error] [pid 2304:tid 139990600201984] err : No module named boto
[Thu Apr 18 13:11:10.015214 2019] [wsgi:error] [pid 2304:tid 139990600201984] [client 81.218.184.134:30333] mod_wsgi (pid=2304): Target WSGI script '/home/ubuntu/path/to/my_project/src/my_project/wsgi.py' does not contain WSGI application 'application'.
我正在 AWS EC2 上使用 ubuntu 16.0.4 apache2 和 nod_wsgi,开始启动正在运行的项目(不是新项目)
在我的 wsgi.py 中打印异常我得到:
No module named boto from
try:
application = get_wsgi_application()
except Exception as e:
print "err : ".format(e)
但我有 boto 安装:
# pip freeze | grep boto
You are using pip version 8.1.1, however version 19.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
boto==2.49.0
boto3==1.9.112
botocore==1.12.16
这是我根据https://docs.djangoproject.com/en/2.2/topics/install/ 配置的其他文件: # cat /etc/apache2/mods-enabled/wsgi.load LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
# cat /etc/apache2/mods-enabled/wsgi.conf
<IfModule mod_wsgi.c>
WSGIPassAuthorization on
WSGIScriptAlias / /home/ubuntu/path/to/wsgi.py
WSGIPythonPath /home/ubuntu/path/to/my_project
<VirtualHost *:80>
<Directory "/home/ubuntu/path/to//my_project/">
Require all granted
</Directory>
</VirtualHost>
..
</IfModule>
【问题讨论】:
据我所知,错误是由于管理站点无法启动。我找到的唯一解决方案是sudo service apache2 restart
(重新加载并不能解决错误,也不能触摸 wsgi)。
试过了,没有任何改变
那么你需要用你的错误日志更新你的问题..
【参考方案1】:
问题是没有安装所有的python包,在安装了所有缺少的包之后网站工作了
【讨论】:
【参考方案2】:您的WSGIPythonPath
指令中似乎缺少site-packages
目录。我通常将 python 路径定义为WSGIDaemonProcess
指令的一部分:
WSGIDaemonProcess example \
display-name=example \
processes=2 threads=20 \
maximum-requests=10000 \
umask=0002 \
python-path=$SRV/www:$SRV/src:$SRV/venv/prod_142/lib/python2.7/site-packages \
python-eggs=$SRV/.python-eggs
WSGIScriptAlias / $SRV/www/example/wsgi.py \
process-group=example \
application-group=%GLOBAL
您可以在https://github.com/datakortet/dkbuild-apacheconf(我是作者)的自述文件中看到功能更全面的虚拟主机定义。
【讨论】:
以上是关于带有 apache 的 wsgi 无法读取管道安装的 python 包的主要内容,如果未能解决你的问题,请参考以下文章
目标 WSGI 脚本无法作为 Python module.Flask.Apache 加载
无法使用 mod-wsgi 在 Apache 上部署 django
在 Dataflow 上运行的 Apache Beam 管道无法从 KafkaIO 读取:SSL 握手失败
Django / Apache / mod_wsgi - WEB 应用程序挂起 - 无法启动