RuntimeError: Работа вне контекста запроса.с огнестрельным оружием - PullRequest
0 голосов
/ 05 февраля 2019

Каждый раз, когда я запускаю свой код как 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 голосов
/ 10 февраля 2019

Это не работает, потому что index не является приложением wsgi - недостаточно, чтобы функция имела правильную подпись.Вместо этого выполните следующее:

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

При запуске python3 myapp.py проблем не возникает, потому что dev-серверу фляги, app.run, не требуется приложение wsgi, в то время как Gunicorn делает это.С учетом вышесказанного вы можете также удалить подпись index.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...