python – Flask App只返回404,无论它是如何运行的

我似乎无法让我的应用程序在uWSGI上正常运行.我通过从命令行运行uWSGI将nginx从等式中取出,它表现出与在nginx上运行时完全相同的行为.

uwsgi -s 0.0.0.0:5050 -w app:app --uid www-data --gid www-data --protocol=http

uwsgi按如下方式处理请求:

[pid:0625|app: 0|req: 1/1] 192.168.1.219 () {34 vars in 737 bytes} [Tue Mar 31 11:10:30 2015] GET /admin => generated 233 bytes in 25 msecs (HTTP/1.1 404) 3 headers in 249 bytes (1 switches on core 0)

我的文件结构如下

/srv/www/cc/app/
               static/
               templates/
               __init__.py
               views.py
               models.py
               forms.py

根据新的证据,它可能是我的应用程序,这是我的init.py文件:

import os
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand

app = Flask(__name__)
app.config.from_object('config')

db = SQLAlchemy(app)
migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)

from flask.ext.mail import Mail
mail = Mail(app)

from app import models, forms

#setup flask-security
from flask.ext.security import Security, SQLAlchemyUserDatastore

user_datastore = SQLAlchemyUserDatastore(db, models.User, models.Role)
security = Security(app, user_datastore,
    confirm_register_form = forms.ExtendedConfirmRegisterForm
    )

from app import views

链接到我的整个views.py:http://pastebin.com/0jMTarEe

我有这个相同的应用程序,在开发早期的方式,在我有一个不同的nginx uwsgi服务器上运行,并且已经完全复制了他们的配置文件,但无济于事.我真的不知道为什么这不起作用.但根据Flask文档,以上是我应该需要的.

对于咯咯笑声,我继续将uwsgi从等式中移除.在cc文件夹中创建了一个run.py文件… python run.py:

from app import app
app.run('0.0.0.0', port=5050, debug=True)

请求:

* Running on http://0.0.0.0:5050/
* Restarting with reloader
192.168.1.219 - - [31/Mar/2015 11:56:24] "GET / HTTP/1.1" 404 -

所以它似乎是我的应用程序的问题,而不是任何关于nginx或uwsgi的问题.我在任何地方都没有收到任何错误……可能会出错?

编辑

通过评论中的建议进行了更多挖掘.我编辑了init.py的底部:

import . import views

print views
print app.url_map

这是我启动服务器时的输出:

* Running on http://0.0.0.0:5050/
* Restarting with reloader
<module 'app.views' from '/srv/www/cc/app/views.py'>
Map([<Rule '/' (HEAD, POST, OPTIONS, GET) -> index>,
<Rule '/admin/' (HEAD, POST, OPTIONS, GET) -> admin>,
<Rule '/test/' (HEAD, POST, OPTIONS, GET) -> test>
...
Lots more ... ])

最佳答案 如果您设置SERVER_NAME配置值,则它必须与应用程序外部服务的主机和端口匹配.要么将其注释掉,要么使其与服务器的域或IP匹配.

app.config['SERVER_NAME'] = 'example.com:80'

运行dev服务器时,名称将是localhost:5000,虽然在这种情况下设置它通常是没有必要的.

点赞