Nano Hash - криптовалюты, майнинг, программирование

DispatcherMiddleware не работает с gunicorn из-за отсутствия обязательного позиционного аргумента: «приложение», но как его указать?

Чтобы передавать разные целевые запросы их конкретным приложениям DashApp, я интегрировал DispatcherMiddleware в свой проект Flask. Локально он работает нормально, но на сервере gunicorn в Heroku отсутствует один обязательный позиционный аргумент: «приложение», как я назвал свое приложение. Как мне сделать позиционный аргумент, чтобы запустить его?

  • Это мой журнал ошибок после успешного развертывания после вызова gunicorn через http-запрос.
2020-11-04T08:14:23.211801+00:00 heroku[web.1]: State changed from starting to up
2020-11-04T08:15:55.608341+00:00 app[web.1]: [2020-11-04 08:15:55 +0000] [10] [ERROR] Error handling request /
2020-11-04T08:15:55.608354+00:00 app[web.1]: Traceback (most recent call last):
2020-11-04T08:15:55.608355+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 134, in handle
2020-11-04T08:15:55.608355+00:00 app[web.1]:     self.handle_request(listener, req, client, addr)
2020-11-04T08:15:55.608356+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
2020-11-04T08:15:55.608356+00:00 app[web.1]:     respiter = self.wsgi(environ, resp.start_response)
2020-11-04T08:15:55.608424+00:00 app[web.1]: TypeError: run_simple() missing 1 required positional argument: 'application'
2020-11-04T08:15:55.611228+00:00 app[web.1]: 10.63.193.41 - - [04/Nov/2020:08:15:55 +0000] "GET / HTTP/1.1" 500 0 "-" "-"
  • Это мой run.py (который содержит аргумент приложения ниже run_simple)
from werkzeug.middleware.dispatcher import DispatcherMiddleware
from werkzeug.serving import run_simple


from app_datacenter.flask_app import flask_app


from app_datacenter.dash_apps.sessionlist_dummydata import app as sessionlist
from app_datacenter.dash_apps.sessionreport_realdata import app as sessionreport




application = DispatcherMiddleware(flask_app,
    {
    '/app1': sessionlist.server,
    '/app2': sessionreport.server
    }
)




if __name__ == '__main__':
    run_simple(
        hostname='localhost',
        port=5000,
        application=application,
        use_reloader=True,
        use_debugger=True,
        use_evalex=True
    )
  • Это мой профайл
web: gunicorn run:run_simple --log-file=-

  • я думаю, это связано с приложением, которое вы определили выше, и в run_simple он не может получить приложение wsgi с ним, попробуйте передать экземпляр приложения wsgi и посмотреть 04.11.2020

Ответы:


1

Я нашел свою ошибку - приложение должно вызываться внутри Procfile (а не методом, как я пробовал раньше). С этим Procfile все работает нормально:

web: gunicorn run:application --log-file=-
04.11.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..