在flask+mod-wsgi+httpd構(gòu)造高并發(fā)的環(huán)境的時(shí)候,報(bào)如下錯(cuò)誤遵馆。
一. 報(bào)錯(cuò)信息如下
[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. 個(gè)人解釋
python3自帶的創(chuàng)建虛擬環(huán)境的venv/bin目錄下沒有activate_this.py這個(gè)激活文件粥血,而這個(gè)激活文件在編寫myapp.wsgi的時(shí)候需要在開頭就要使用這個(gè)python文件來激活對應(yīng)的python虛擬環(huán)境湿滓。
2. 官方解釋
三. 解決措施
更換虛擬環(huán)境诗良,用virtualenv來建立虛擬環(huán)境,而不是使用python3自帶的命令來構(gòu)造虛擬環(huán)境
1.安裝virtualenv
pip3 install virtualenv
- 刪掉原來的venv
rm -rf venv
- 重新建立虛擬環(huán)境
virtualenv venv
- 激活環(huán)境
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
其他的按照原來的環(huán)境進(jìn)行配置即可虐骑,然后重新運(yùn)行准验,應(yīng)該就沒有這個(gè)問題啦。
- 當(dāng)激活環(huán)境不需要使用的時(shí)候廷没,可以關(guān)閉激活
deactivate
綜上糊饱,大家加油~~