作为master运行uwsgi将不会处理请求

时间:2015-12-15 11:50:19

标签: python nginx flask uwsgi

我有以下设置

src
|
|--flask_app
|--|--controllers.py
|--|--provider.py
|--|--__init__.py
|--config.py
|--wsgi.py
|--myproject.ini
|--myproject.sock

init .py创建了烧瓶应用

from flask import Flask, g
from flask_app.controllers import api_module
from flask_app.provider import CassandraDbProvider


# Define WSGI application object

app = Flask(__name__)

# Configure it

app.config.from_object('config')

cassandra = CassandraDbProvider(**app.config['DATABASE_CONNECT_OPTIONS'])



@app.before_request
def before_request():
    g.db = cassandra


app.register_blueprint(api_module)

controler.py具有在端点上运行的视图,并且还创建了蓝图

最后wsgi.py有以下代码

from cassandra_flask_app import app as application

if __name__ == "__main__":
application.run(host="0.0.0.0", port=5000)

myproject.ini

[uwsgi]
module = wsgi

logto = /var/log/uwsgi/uwsgi.log

threads = 10

socket = myproject.sock
chmod-socket = 664
vacum = true

die-on-term = true

Upstart脚本

description "uWSGI server instance configured to serve myproject"

start on runlevel [2345]
stop on runlevel [!2345]

setuid myuser
setgid www-data

env PATH=/home/myuser/myproject/myprojectenv/bin
chdir /home/myuser/myproject/src
exec uwsgi --ini myproject.ini

和nginx

server {
    listen 80;
    server_name myIpHere;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/myuser/myproject/src/myproject.sock;
    }
}

controller.py

api_module = Blueprint('my_api', __name__, prefix='/api') # this might be wrong now because I don't have code infront of me

#myvmip/api/ works fine when uwsgi is master
@api_module.route('/', methods=['GET']):
def test_url():
    return 'c'

#myvmip/api/normal_view/?query1=some_value" doesn't work when in master with no error. Only connection timeout error in nginx error.log.
@api_module.route('/nomral_view/', methods=['GET'])
def normal_view():
    get_parameter = request.args.get('query1')
    #uses g.db to connect to database and fetch some results
    #database is cassandra db
    return jsonify(**json) 

它在我的开发机器上运行良好。在我的虚拟机上,我使用nginx和uwsgi加载我的烧瓶应用程序。我已经在互联网上的许多教程中描述了uwsgi。问题是,如果我将uwsgi作为master运行,那么它将不会访问我的一些URL。禁用它可以正常工作。你觉得它可能是什么?是不是uwsgi没有作为主人加载?

1 个答案:

答案 0 :(得分:0)

您需要将以下内容添加到myproject.ini文件

chdir = /path/to/project
callable = application

http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html#deploying-flask

此外,如果你有virtualenv,你应该添加

venv=/path/to/venv