除了" /"之外的Python Flask路由;使用带有nginx和uwsgi的virtualenv给404s

时间:2014-06-15 02:34:27

标签: python nginx flask virtualenv uwsgi

我有一个简单的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)

0 个答案:

没有答案