我有一个简单的Flask应用程序,我试图在nginx和uwsgi后面运行。 当我使用Flask的dev服务器运行应用程序时,一切都按预期工作。 我将浏览器指向localhost:5000和localhost:5000 / hello,然后看“Hi!” 和“你好!”,分别。
但是当我尝试使用uwsgi和nginx运行应用程序时,我可以看到“/”处的路由就好,即我看到“Hi!” 在本地主机上:8181。 但是我在localhost:8181 / hello得到一个404 Not Found的“/ 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。
如果我在文件中使用<venv></venv>
行在virtualenv之外运行<venv></venv>
,我得到错误ImportError: No module named 'encodings'
<venv></venv>
ImportError: No module named 'encodings'
如果我在激活virtualenv后运行uwsgi,我会得到上述结果(除'\'以外的路由404)