Flask выдает ошибку времени выполнения при запуске через Gunicorn, но не через flask run - PullRequest
0 голосов
/ 14 июля 2020

Я слежу за серией видеороликов для ознакомления, поскольку я создаю серверную часть своего первого веб-сайта, используя Flask. В одном из видеороликов я дословно написал эту функцию для использования в качестве декоратора:

# add this as a decorator to pages that require a login
def login_required(f):
    @wraps(f)
    def wrap(*args, **kwargs):
        if 'logged_in' in session:
            return f(*args, **kwargs)
        else:
            flash('You need to login.')
            return redirect(url_for('login'))
    return wrap 

, который используется для перенаправления на логин, если этого требует страница. Это отлично работает при тестировании приложения с использованием python3 -m flask run, но я получаю внутреннюю ошибку сервера со следующей трассировкой стека при запуске gunicorn main:main

[2020-07-13 18:33:52 -0400] [6272] [INFO] Listening at: http://127.0.0.1:8000 (6272)
[2020-07-13 18:33:52 -0400] [6272] [INFO] Using worker: sync
[2020-07-13 18:33:52 -0400] [6274] [INFO] Booting worker with pid: 6274
[2020-07-13 18:33:59 -0400] [6274] [ERROR] Error handling request /
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/gunicorn/workers/sync.py", line 134, in handle
    self.handle_request(listener, req, client, addr)
  File "/usr/local/lib/python3.8/dist-packages/gunicorn/workers/sync.py", line 175, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/home/john/Developer/runjs/main.py", line 15, in wrap
    if 'logged_in' in session:
  File "/home/john/.local/lib/python3.8/site-packages/werkzeug/local.py", line 379, in <lambda>
    __contains__ = lambda x, i: i in x._get_current_object()
  File "/home/john/.local/lib/python3.8/site-packages/werkzeug/local.py", line 306, in _get_current_object
    return self.__local()
  File "/home/john/.local/lib/python3.8/site-packages/flask/globals.py", line 38, in _lookup_req_object
    raise RuntimeError(_request_ctx_err_msg)
RuntimeError: Working outside of request context.

Я не уверен, что именно не так с моим функция, которая вызывает его поломку при прохождении через Gunicorn. Я попытался изучить это, но ни одно из предложенных исправлений не показалось подходящим для моего конкретного сценария c, и я не понимаю, почему он работает локально.

...