python - 由于缺少必需的位置参数:'application',DispatcherMiddleware 不适用于 gunicorn,但如何指定?
问题描述
为了将不同的目标请求传递给他们特定的 DashApp,我将 DispatcherMiddleware 集成到我的 Flask 项目中。在本地它运行良好,但是 Heroku 的 gunicorn 服务器缺少一个必需的位置参数:“应用程序”,正如我所说的我的应用程序。我需要如何进行位置参数才能使其运行?
- 这是我通过 http 请求调用 gunicorn 后成功部署后的错误日志
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
)
- 这是我的 Procfile
web: gunicorn run:run_simple --log-file=-
解决方案
我发现了我的错误 - 必须在 Procfile 中调用应用程序(而不是我之前尝试过的方法)。使用这个 Procfile 它运行良好:
web: gunicorn run:application --log-file=-
推荐阅读
- javascript - 用于操作 youtube 视频的 Chrome 扩展程序
- python - 当我在主循环中处理请求时,如何从 django 视图运行异步函数以在后台运行?
- python - 键盘监视器行为
- microsoft-graph-api - 列出频道消息 $top 参数导致意外结果
- react-native - 组件异常(未定义不是对象(评估'list.todos.filter')
- sql - 如何使用 SQL 查询解析 JSON 对象数组?
- ios - 如何让这些 SwiftUI 文本“按钮”在点击时改变颜色?
- javascript - 使用 React 输入组件 onChange 处理程序断言 toHaveBeenCalledWith
- javascript - 正则表达式匹配某些模式,除非是较大模式的一部分
- sd-card - TI MSP432 带 MicroSD 卡,使用 FatFs FAT/exFAT Lib