我似乎无法让我的应用在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 ... ])
答案 0 :(得分:7)
如果您设置SERVER_NAME
配置值,则必须匹配应用程序外部服务的主机和端口。要么将其注释掉,要么使其与服务器的域或IP匹配。
app.config['SERVER_NAME'] = 'example.com:80'
运行开发服务器时,名称将为localhost:5000
,但在这种情况下设置通常不是必需的。