我想在 centos 5 上使用 nginx、uWsgi、Flask,但总是出现一些错误。
3个app都是最新版本,uwgsi_params文件从uwsgi/nginx复制而来。
我使用 virtualenv 来配置 python 环境。
project path: /path/to/project
virtualevn: /path/to/virenv/pyenv27
第一步:
我使用 nginx 和 uWsgi,并浏览显示错误页面:
uWSGI Error
wsgi application not found
Nginx 配置:
location / {
uwsgi_pass 127.0.0.1:5555;
uwsgi_param UWSGI_PYHOME /path/to/virenv/pyenv27;
uwsgi_param UWSGI_CHDIR /path/to/project;
uwsgi_param UWSGI_SCRIPT uwsgi;
uwsgi_param SCRIPT_NAME "";
include uwsgi_params;
}
Flask文件很简单:
import sys
sys.path.append(sys.path[0])
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "Hello World!"
#app.config.from_pyfile('product.cfg')
def application(environ, start_response):
return app(environ, start_response)
if __name__ == '__main__':
app.run()
uWsgi 命令:
/opt/uwsgi -s 127.0.0.1:5555 -M 4 -t 30 -A 4 -p 4 -d /var/log/uwsgi.log --pidfile /var/run/uwsgi.pid --no-site --vhost --limit-as 256
2步骤
我只使用 uWsgi。
命令:
/opt/uwsgi/uwsgi --xml /path/to/project/uwsgi.xml
但我得到了错误:
ImportError: No module named site
uWsgi xml:
<uwsgi>
<chdir>/path/to/project/</chdir>
<pythonpath>/path/to/project</pythonpath>
<virtualenv>/path/to/virenv/pyenv27</virtualenv>
<wsgi-file>/path/to/project/uwsgi.py</wsgi-file>
<callable>app</callable>
<socket>:6000</socket>
<chmod-socket>666</chmod-socket>
<master />
<processes>1</processes>
<uid>uwsgi</uid>
<gid>uwsgi</gid>
<disable-logging>false</disable-logging><!-- Errors are still logged; this just disables request logging which Cherokee takes care of -->
<daemonize>/path/to/project/uwsgi.log</daemonize>
<vacuum />
<no-orphans />
</uwsgi>
这里有什么问题吗?
答案1
在您的命令行版本中,您有:
/opt/uwsgi -s 127.0.0.1:5555 --no-site
但是在您的 xml 版本中,您缺少一个等效no-site
选项:
<uwsgi>
<no-site>true</no-site>
</uwsgi>
所以它正在尝试加载 Pythonsite.py
文件。您也可以添加一个空文件,但我会选择 xml 选项。并且
<no-site />
也是有效的语法,我倾向于使用真的旗帜,我自己。