我似乎无法让我的应用程序在 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'
当运行开发服务器时,名称将是 localhost:5000
,尽管在这种情况下通常不需要设置它。
关于python - Flask App 只返回 404,不管它是如何运行的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29375903/