在 AWS Elastic Beanstalk 上,在“运行 Python 3.6 的 64 位 Amazon Linux 2017.09 v2.6.0”平台上,配置似乎存在问题mod_wsgi
。我看到了以下内容/etc/httpd/conf.d/wsgi.conf
:
WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \
python-home=/opt/python/run/venv/ \
python-path=/opt/python/current/app:/opt/python/run/venv/lib64/python3.6/site-packages:/opt/python/run/venv/lib/python3.6/site-packages user=wsgi group=wsgi \
home=/opt/python/current/app
然而,我得到了这个/var/log/httpd/error_log
:
[Mon Nov 20 19:54:44.565076 2017] [:error] [pid 32080] mod_wsgi (pid=32080): Call to 'site.addsitedir()' failed for '(null)', stopping.
[Mon Nov 20 19:54:44.565444 2017] [:error] [pid 32080] mod_wsgi (pid=32080): Call to 'site.addsitedir()' failed for '/opt/python/run/venv/lib64/python3.6/site-packages:/opt/python/run/venv/lib/python3.6/site-packages'.
尝试访问该网站会导致以下错误:
[Mon Nov 20 21:21:21.304605 2017] [:error] [pid 2886] [remote 71.236.217.102:39802] ModuleNotFoundError: No module named 'myappname'
如果我将WSGIDaemonProcess
指令更改为以下内容(从而删除以冒号分隔的路径):
WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \
python-home=/opt/python/run/venv/ \
python-path=/opt/python/current/app user=wsgi group=wsgi \
home=/opt/python/current/app
然后我就再也得不到了ModuleNotFoundError
。
这似乎与https://github.com/GrahamDumpleton/mod_wsgi/issues/92此问题已在 4.4.15 中修复mod_wsgi
。不过,AMI 已预安装mod24_wsgi-python36.x86_64==3.5-1.24.amzn1
。
如果我尝试WSGIDaemonProces
使用 .ebextensions 脚本修复 s,它会被其中一个内置部署钩子所修复,而且无论如何,默认的默认设置似乎被破坏了。我该如何修复这个问题?
答案1
我今天遇到了同样的问题(“64位 Amazon Linux 2017.09 v2.6.0 运行 Python 3.6”,mod_wsgi 错误)。
我有一个解决方法,但我不确定它是否是一个合适或最直接的解决方案。
简而言之
安装最新的mod_wsgi
。
更长的解释...
手动检查是否有效
首先,我手动执行以下操作来检查它是否正常工作,然后我编写了脚本,以便它不会在以后的部署中被破坏。
安装mod_wsgi
需要apxs
,因此转到实例并找到包:
eb ssh
yum provides apxs
在我的例子中有 3 个。最老的在 ssh 控制台上运行,因此我添加了.ebextensions/01_packages.config
:
packages:
yum:
...
httpd24-devel-2.4.27-3.75.amzn1.x86_64: []
然后在 ssh 中我按照这个顺序测试手动构建的版本 od mod_wsgi
(我无法让任何yum
包工作 - 尽管它可能是可以做到的)。
sudo -s # become root
cd /tmp
wget -q "https://github.com/GrahamDumpleton/mod_wsgi/archive/4.4.21.tar.gz"
tar -xzf '4.4.21.tar.gz'
cd ./mod_wsgi-4.4.21
./configure --with-python=/usr/bin/python3.6
make
make install
假设到目前为止一切顺利,重新启动 Apache:
service httpd restart
然后仔细观察var/log/httpd/error_log
,你会看到:
... [pid 2088] AH00163: Apache/2.4.27 (Amazon) mod_wsgi/4.4.21 Python/3.6.2 configured -- resuming normal operations
我重新加载了 Python 应用程序页面并且它可以正常工作(虽然它有不同的错误但mod_wsgi
可以正常工作)。
现在来进行这部分部署。
脚本
经过几次迭代后,我在.ebextensions/...
文件中确定了这一点:
packages:
yum:
git: []
gcc-c++: []
httpd24-devel-2.4.27-3.75.amzn1.x86_64: []
files:
"/tmp/update-wsgi.sh" :
mode: "000755"
owner: root
group: root
content: |
# update mod_wsgi
cd /tmp
wget -q "https://github.com/GrahamDumpleton/mod_wsgi/archive/4.4.21.tar.gz" && \
tar -xzf '4.4.21.tar.gz' && \
cd ./mod_wsgi-4.4.21 && \
sudo ./configure --with-python=/usr/bin/python3.6 && \
sudo make && \
sudo make install && \
sudo service httpd restart
commands:
mod_wsgi_update:
command: /tmp/update-wsgi.sh
cwd: /tmp
一些说明:
gcc
需要依赖才能mod_wsgi
构建- 依赖
httpd24-devel
项针对的是apsx
工具