RuntimeError:在请求上下文之外工作。含马里角

时间:2019-02-05 09:04:55

标签: python flask gunicorn

无论何时我以python3 myapp.py的身份运行代码,都可以正常工作,但是只要我使用gunicorn -w 4 myapp:index -b 10.91.1.230:5055 &

它抛出

ion@aurora:~/TNQ$ [2019-02-05 14:26:34 +0530] [27107] [INFO] Starting 
gunicorn 19.9.0
..............
27116
[2019-02-05 14:26:38 +0530] [27113] [ERROR] Error handling request /
Traceback (most recent call last):
  File "/home/ion/.local/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle
    self.handle_request(listener, req, client, addr)
  File "/home/ion/.local/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/home/ion/TNQ/myapp.py", line 16, in index
    f = request.files['file']
  File "/home/ion/.local/lib/python3.6/site-packages/werkzeug/local.py", line 347, in __getattr__
    return getattr(self._get_current_object(), name)
  File "/home/ion/.local/lib/python3.6/site-packages/werkzeug/local.py", line 306, in _get_current_object
    return self.__local()
  File "/home/ion/.local/lib/python3.6/site-packages/flask/globals.py", line 37, in _lookup_req_object
    raise RuntimeError(_request_ctx_err_msg)
RuntimeError: Working outside of request context.

This typically means that you attempted to use functionality that needed
an active HTTP request.  Consult the documentation on testing for
information about how to avoid this problem.

myapp.py

from flask import Flask,request
from CXE.src.models import class_classic as cc   
app = Flask(__name__)    
@app.route('/', methods=['POST'])
#def index(environ, start_response):
def index(environ, start_response):
    with app.app_context():
        #if request.method == 'POST':
        f = request.files['file']
        a = cc.initiate(f)
    return a   
 if __name__ == '__main__':
    app.run(host = '0.0.0.0',port=5505,debug=True)

我需要将代码放在gunicorn上,以便在线程上使用它。知道为什么它不起作用吗?

1 个答案:

答案 0 :(得分:1)

这是行不通的,因为index不是wsgi app-函数具有正确的签名是不够的。而是执行以下操作:

gunicorn -w 4 myapp:app -b 10.91.1.230:5055 &

运行python3 myapp.py时不会出现问题,因为flask的开发服务器app.run不需要wsgi应用,而gunicorn则需要。话虽如此,您不妨继续删除index签名。