我有一个简单的Flask应用程序,我试图在nginx和uwsgi后面运行。当我使用Flask的开发服务器运行应用程序时,一切都按预期工作。我将浏览器指向localhost:5000和localhost:5000 / hello并查看"嗨!"和#34;你好!"分别。
但是当我尝试使用uwsgi和nginx运行应用程序时,我可以看到" /"很好,也就是说,我看到了#34;嗨!"在localhost:8181。但是我得到了一个404 Not Found for" / hello" localhost:8181 / hello。对于我尝试添加到不仅仅是" /"的应用程序的任何路线,我都会获得404s。
我的应用程序的文件夹结构如下所示:
my_app/
app/
__init__.py
venv/
app.py
uwsgi.xml
__init__.py
只是:
import os
import sys
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/hello')
def hello():
return 'Hello!'
@app.route('/')
def hi():
return 'Hi!'
app.py是:
from app import app
from flask import Flask
if __name__ == '__main__':
app.run(host='0.0.0.0')
uwsgi.xml:
<uwsgi>
<plugin>python27</plugin>
<socket>127.0.0.1:4141</socket>
<master/>
<processes>4</processes>
<harakiri>60</harakiri>
<reload-mercy>8</reload-mercy>
<cpu-affinity>1</cpu-affinity>
<stats>/tmp/stats.socket</stats>
<max-requests>2000</max-requests>
<limit-as>512</limit-as>
<reload-on-as>256</reload-on-as>
<reload-on-rss>192</reload-on-rss>
<venv>/PATH/TO/my_app/venv</venv>
<no-orphans/>
<vacuum/>
<enable-threads/>
</uwsgi>
和我的nginx.conf的相关内容:
upstream uwsgi_host4 {
server 127.0.0.1:4141;
}
server {
listen 8181;
server_name localhost;
root /PATH/TO/my_app;
location / {
set $app app;
uwsgi_pass uwsgi_host4;
}
}
我整天都被困在这一天并且不能帮助,但认为答案显而易见。任何帮助都将非常感激!
**〜〜更新〜〜**
似乎是virtualenv的一个问题。如果我在virtualenv之外运行uwsgi命令并从uwsgi.xml中删除<venv></venv>
行,一切正常。但是,uwsgi表示它使用的是Python 3.3,这是我机器的默认设置;我需要使用virtualenv的一个原因是我可以使用2.7。
如果我在virtualenv之外使用文件中的<venv></venv>
行运行uwsgi,我会收到错误ImportError: No module named 'encodings'
如果我在激活virtualenv之后运行uwsgi,我会得到上述结果(除了&#39; \&#39;之外的路线为404)