jbl*_*bll 5 python nginx virtualenv flask uwsgi
我有一个简单的 Flask 应用程序,我试图在 nginx 和 uwsgi 后面运行它。当我使用 Flask 的开发服务器运行应用程序时,一切都按预期工作。我将浏览器指向 localhost:5000 和 localhost:5000/hello 并看到“嗨!” 和“你好!”,分别。
但是当我尝试使用 uwsgi 和 nginx 运行应用程序时,我可以看到“/”处的路由就好了,即,我看到“嗨!” 在本地主机上:8181。但是我在 localhost:8181/hello 处收到“/hello”路由的 404 Not Found。对于我尝试添加到应用程序的任何路径,我都会收到 404,而不仅仅是“/”。
我的应用程序的文件夹结构如下所示:
my_app/
app/
__init__.py
venv/
app.py
uwsgi.xml
Run Code Online (Sandbox Code Playgroud)
哪里__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!'
Run Code Online (Sandbox Code Playgroud)
app.py 是:
from app import app
from flask import Flask
if __name__ == '__main__':
app.run(host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
以及我的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;
}
}
Run Code Online (Sandbox Code Playgroud)
我一整天都被困在这个问题上,不禁认为答案是显而易见的。任何帮助将不胜感激!
**~ ~更新~ ~**
似乎是 virtualenv 的问题。如果我在 virtualenv 之外运行 uwsgi 命令并<venv></venv>从 uwsgi.xml 中删除该行,则一切正常。但是,uwsgi 说它使用的是 Python 3.3,这是我机器的默认值;我需要使用 virtualenv 的一个原因是我可以使用 2.7。
如果我使用<venv></venv>文件中的行在virtualenv 之外运行 uwsgi ,我会收到错误消息ImportError: No module named 'encodings'
如果我在激活 virtualenv 后运行 uwsgi,我会得到上述结果(除 '\' 以外的路由为 404s)
| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |