我已经写了一个小的Flask web应用程序。我已经在我的本地机器上的Apache2 Ubuntu中配置了它,它可以在Apache下工作。
部署到远程服务器(Ubuntu/Apache2)时,wsgi脚本出现ImportError错误
但是,从命令行执行wsgi文件不会创建错误条件。下面是日志中的错误,然后手动执行wsgi脚本:
[wsgi:error] [pid 414495] [client 174.52.77.157:51364] importterror: No module named lakesidepy.app
root@localhost:/var/www/lakesidepy# ./lakesidepy.wsgi
root@localhost:/var/www/lakesidepy#
这是wsgi文件:
#!/usr/bin/python3
import sys
sys.path.insert(0,"/var/www/")
from lakesidepy.app import app as application
这是apache配置:
<VirtualHost *:80>
ServerName lakesidepy
DocumentRoot /var/www/lakesidepy
HostNameLookups off
WSGIDaemonProcess lakesidepy user=www-data group=www-data threads=5
WSGIScriptAlias / /var/www/lakesidepy/lakesidepy.wsgi
</VirtualHost>
the lakesidepy dir:
total 44
drwxr-xr-x 5 duane duane 4096 May 22 03:32 .
drwxrwsr-x 13 duane duane 4096 May 22 03:05 ..
-rwxr-xr-x 1 duane duane 3993 May 20 00:52 app.py
-rwxr-xr-x 1 duane duane 107 May 22 03:32 lakesidepy.wsgi
-rw-r--r-- 1 root root 12288 May 19 01:11 .lakesidepy.wsgi.swp
drwxr-xr-x 2 duane duane 4096 May 22 03:31 __pycache__
drwxr-xr-x 2 duane duane 4096 May 18 23:36 static
drwxr-xr-x 2 duane duane 4096 May 18 23:36 templates
-rw-r--r-- 1 duane duane 285 May 22 02:53 test_script.py
duane@localhost:/var/www/lakesidepy$
app.py:
from flask import Flask
.
.
.
app = Flask(__name__)
@app.route("/")
def input():
return render_template('input.html')
...
我找到问题了。
本地的wsgi模块已正确配置为Python 3。
服务器上的wsgi模块已配置为Python 2。
通过替换wsgi模块修复了这个问题:
sudo apt-get install libapache2-mod-wsgi-py3
在app.py文件中
if __name__ == '__main__':
app.run(host="localhost", port=3000, debug=True)
和wsgi文件
if __name__ == "__main__":
app.run(port=3000)