在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 
[wsgi:error] [pid 28427:tid 140540431517440]     exec(file_.read(), dict(__file__=activate_this))
[wsgi:error] [pid 28427:tid 140540431517440]   File "", 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
  1. 删掉原来的venv
rm -rf venv
  1. 重新建立虚拟环境
virtualenv venv
  1. 激活环境
source venv/bin/active
  1. 重新安装所需要的各种依赖,比如下面这些
pip3 install Flask
pip3 install mod_wsgi
pip3 install flask-sqlalchemy 
pip3 install mysqlclient
  1. 更新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

其他的按照原来的环境进行配置即可,然后重新运行,应该就没有这个问题啦。

  1. 当激活环境不需要使用的时候,可以关闭激活
deactivate

综上,大家加油~~

文章来源于互联网,如有雷同请联系站长删除:【Flask】使用mod-wsgi时报错 deactivate invalid syntax问题

发表评论