在flask+mod-wsgi+httpd构造高并发的环境的时候,报如下错误。
一. 报错信息如下
[wsgi:error] [pid 28427:tid 140540431517440] mod_wsgi (pid=28427): Target WSGI script '/var/www/myapp.domain.com/myapp.wsgi' cannot be loaded as Python module.
[wsgi:error] [pid 28427:tid 140540431517440] mod_wsgi (pid=28427): Exception occurred processing WSGI script '/var/www/myapp.domain.com/myapp.wsgi'.
[wsgi:error] [pid 28427:tid 140540431517440] Traceback (most recent call last):
[wsgi:error] [pid 28427:tid 140540431517440] File "/var/www/myapp.domain.com/myapp.wsgi", line 5, in <module>
[wsgi:error] [pid 28427:tid 140540431517440] exec(file_.read(), dict(__file__=activate_this))
[wsgi:error] [pid 28427:tid 140540431517440] File "<string>", line 4
[wsgi:error] [pid 28427:tid 140540431517440] deactivate () {
[wsgi:error] [pid 28427:tid 140540431517440] ^
[wsgi:error] [pid 28427:tid 140540431517440] SyntaxError: invalid syntax
二. 问题原因
1. 个人解释
python3自带的创建虚拟环境的venv/bin目录下没有activate_this.py这个激活文件,而这个激活文件在编写myapp.wsgi的时候需要在开头就要使用这个python文件来激活对应的python虚拟环境。
2. 官方解释
三. 解决措施
更换虚拟环境,用virtualenv来建立虚拟环境,而不是使用python3自带的命令来构造虚拟环境
1.安装virtualenv
pip3 install virtualenv
- 删掉原来的venv
rm -rf venv
- 重新建立虚拟环境
virtualenv venv
- 激活环境
source venv/bin/active
- 重新安装所需要的各种依赖,比如下面这些
pip3 install Flask
pip3 install mod_wsgi
pip3 install flask-sqlalchemy
pip3 install mysqlclient
- 更新mapp.wsgi
activate_this = '/path/to/yout/app/venv/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
import sys
sys.path.insert(0, "/path/to/your/app")
from mapp import app as application
其他的按照原来的环境进行配置即可,然后重新运行,应该就没有这个问题啦。
- 当激活环境不需要使用的时候,可以关闭激活
deactivate
综上,大家加油~~