【发布时间】:2021-05-26 17:06:56
【问题描述】:
我在将使用 websockets 的 Flask 应用程序部署到 heroku 时遇到了很多麻烦。它适用于heroku local,甚至在本地运行相同的命令时也能正常工作。
web: gunicorn --worker-class eventlet --log-file=- app:app
该应用程序与此处的示例相同,只有很少的更改:https://github.com/miguelgrinberg/Flask-SocketIO/blob/master/example/app.py
以下是错误日志:
2021-02-24T11:18:46.724927+00:00 heroku[web.1]: State changed from starting to up
2021-02-24T11:19:08.934471+00:00 app[web.1]: [2021-02-24 11:19:08 +0000] [4] [INFO] Shutting down: Master
2021-02-24T11:19:09.027108+00:00 heroku[web.1]: Process exited with status 0
2021-02-24T11:19:15.379018+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path="/" host=break1n.herokuapp.com request_id=f1d4ceac-69a1-43fc-a08d-c7462c6501fd fwd="122.181.58.194" dyno=web.1 connect=1ms service=17217ms status=503 bytes=0 protocol=https
2021-02-24T11:19:15.374389+00:00 app[web.1]: [2021-02-24 11:19:15 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:8)
2021-02-24T11:19:15.374534+00:00 app[web.1]: [2021-02-24 11:19:15 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:9)
2021-02-24T11:19:15.377083+00:00 app[web.1]: [2021-02-24 11:19:15 +0000] [9] [ERROR] Socket error processing request.
2021-02-24T11:19:15.377084+00:00 app[web.1]: Traceback (most recent call last):
2021-02-24T11:19:15.377084+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/gunicorn/workers/base_async.py", line 65, in handle
2021-02-24T11:19:15.377085+00:00 app[web.1]: util.reraise(*sys.exc_info())
2021-02-24T11:19:15.377085+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/gunicorn/util.py", line 625, in reraise
2021-02-24T11:19:15.377086+00:00 app[web.1]: raise value
2021-02-24T11:19:15.377086+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/gunicorn/workers/base_async.py", line 38, in handle
2021-02-24T11:19:15.377086+00:00 app[web.1]: listener_name = listener.getsockname()
2021-02-24T11:19:15.377087+00:00 app[web.1]: OSError: [Errno 9] Bad file descriptor
2021-02-24T11:19:15.377336+00:00 app[web.1]: [2021-02-24 11:19:15 +0000] [8] [ERROR] Socket error processing request.
2021-02-24T11:19:15.377336+00:00 app[web.1]: Traceback (most recent call last):
2021-02-24T11:19:15.377336+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/gunicorn/workers/base_async.py", line 65, in handle
2021-02-24T11:19:15.377337+00:00 app[web.1]: util.reraise(*sys.exc_info())
2021-02-24T11:19:15.377337+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/gunicorn/util.py", line 625, in reraise
2021-02-24T11:19:15.377337+00:00 app[web.1]: raise value
2021-02-24T11:19:15.377338+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/gunicorn/workers/base_async.py", line 38, in handle
2021-02-24T11:19:15.377338+00:00 app[web.1]: listener_name = listener.getsockname()
2021-02-24T11:19:15.377338+00:00 app[web.1]: OSError: [Errno 9] Bad file descriptor
2021-02-24T11:19:15.377724+00:00 app[web.1]: [2021-02-24 11:19:15 +0000] [9] [INFO] Worker exiting (pid: 9)
2021-02-24T11:19:15.378140+00:00 app[web.1]: [2021-02-24 11:19:15 +0000] [8] [ERROR] Socket error processing request.
2021-02-24T11:19:15.378141+00:00 app[web.1]: Traceback (most recent call last):
2021-02-24T11:19:15.378141+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/gunicorn/workers/base_async.py", line 65, in handle
2021-02-24T11:19:15.378142+00:00 app[web.1]: util.reraise(*sys.exc_info())
2021-02-24T11:19:15.378142+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/gunicorn/util.py", line 625, in reraise
2021-02-24T11:19:15.378142+00:00 app[web.1]: raise value
2021-02-24T11:19:15.378149+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/gunicorn/workers/base_async.py", line 38, in handle
2021-02-24T11:19:15.378149+00:00 app[web.1]: listener_name = listener.getsockname()
2021-02-24T11:19:15.378149+00:00 app[web.1]: OSError: [Errno 9] Bad file descriptor
2021-02-24T11:19:15.378747+00:00 app[web.1]: [2021-02-24 11:19:15 +0000] [8] [ERROR] Socket error processing request.
2021-02-24T11:19:15.378747+00:00 app[web.1]: Traceback (most recent call last):
2021-02-24T11:19:15.378748+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/gunicorn/workers/base_async.py", line 65, in handle
2021-02-24T11:19:15.378748+00:00 app[web.1]: util.reraise(*sys.exc_info())
2021-02-24T11:19:15.378748+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/gunicorn/util.py", line 625, in reraise
2021-02-24T11:19:15.378749+00:00 app[web.1]: raise value
2021-02-24T11:19:15.378749+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/gunicorn/workers/base_async.py", line 38, in handle
2021-02-24T11:19:15.378749+00:00 app[web.1]: listener_name = listener.getsockname()
2021-02-24T11:19:15.378749+00:00 app[web.1]: OSError: [Errno 9] Bad file descriptor
2021-02-24T11:19:15.379429+00:00 app[web.1]: [2021-02-24 11:19:15 +0000] [8] [INFO] Worker exiting (pid: 8)
2021-02-24T11:19:15.443250+00:00 app[web.1]: [2021-02-24 11:19:15 +0000] [10] [INFO] Booting worker with pid: 10
2021-02-24T11:19:15.504260+00:00 app[web.1]: [2021-02-24 11:19:15 +0000] [11] [INFO] Booting worker with pid: 11
2021-02-24T11:19:15.615154+00:00 app[web.1]: Staring Server........
2021-02-24T11:19:15.669596+00:00 app[web.1]: Staring Server........
更新:
我已经尝试了https://flask-socketio.readthedocs.io/en/latest/ 中的所有部署选项。 gevent 和 eventlet 似乎都不起作用
【问题讨论】:
-
尝试在没有 gunicorn 的情况下部署应用程序。成功后,尝试在本地运行 gunicorn。该应用可能与 gunicorn 不兼容。
-
让我试试
-
效果很好
标签: python heroku socket.io gunicorn flask-socketio