Это можно быстро решить, создав новый файл wsgi.py
со следующим содержимым:
import run
PresentConfig = run.BaseConfig
app = run.create_app(PresentConfig)
Затем выполните с:
uwsgi --http localhost:5000 --wsgi-file wsgi.py --callable app
или ...
gunicorn --bind 'localhost:5000' wsgi:app
Почему это работает ...
Если у вас есть , загляните в файл run.py
и обратите внимание, что происходит, когда вы запускаете это непосредственно с помощью python
:
if __name__ == "__main__":
PresentConfig = BaseConfig
app = create_app(PresentConfig)
app.run(use_debugger=False, use_reloader=False, passthrough_errors=True)
, вы можете видеть, что создается app
на основе возвращаемого значения функции create_app
, которая передается в конфигурации. Также обратите внимание, что функция create_app
регистрирует «другие URL» как часть проекта api_bp
.
Однако код в этом предложении if
никогда не выполняется, когда приложение выполняется с помощью uwsgi / gunicorn ; вместо этого импортируемый объект app
является одним без зарегистрированных других URL.
Создав файл wsgi.py
выше, вы делаете все это способом, который затем может быть улучшен исполняемым файлом wsgi / gunicorn.
Имея это в виду еще один способ исправить это - изменить последние четыре строки run.py
так, чтобы они выглядели так:
PresentConfig = BaseConfig
app = create_app(PresentConfig)
if __name__ == "__main__":
app.run(use_debugger=False, use_reloader=False, passthrough_errors=True)
Затем вы можете выполнить это с помощью оригинальной команды wsgi.
Это Стоит отметить, что это может привести к поломке другого кода, который выполняет from run import app
и ожидает, что app
не будет возвращаемым значением create_app
(маловероятно в этом случае).
Дайте мне знать, если вам нужно что-то прояснить.