Eventlet heroku flasksocketio应用程序不工作



我在部署使用websockets到heroku的Flask应用程序时遇到了很多麻烦。它可以很好地使用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似乎都不起作用

根据建议,这是heroku的问题,而不是gunicorn或eventlet的问题。修复后,eventlet gunicorn不合作。所以在最后的英雄,我切换到uwsgi。在herooku上有一些不兼容的问题。

你试过了吗

web: gunicorn --worker-class eventlet -w 1 ...

当我不设置-w 1选项时,我经常遇到错误。

相关内容

最新更新