抱歉,我是web开发的新手,我正在尝试在Heroku上安装一个flask-socketio应用程序,方法是使用gunicorn和gevent-websocket来支持WebSocket。然而,这个应用程序不能工作。为了更好地说明这个问题,我设置了一个简单的示例。
这是我的application.py (这里不使用套接字,但在实际版本中使用)
from flask import Flask, render_template
from flask_socketio import SocketIO
import os
app = Flask(__name__)
app.secret_key = os.environ.get('SECRET')
socketio = SocketIO(app)
@app.route("/")
def index():
return render_template("index.html")
app.run()<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
test page
</body>
</html>这是requirements.txt文件
bidict==0.21.4
click==8.0.3
Flask==2.0.2
Flask-SocketIO==5.1.1
gevent==21.8.0
gevent-websocket==0.10.1
greenlet==1.1.2
gunicorn==20.1.0
importlib-metadata==4.8.2
itsdangerous==2.0.1
Jinja2==3.0.3
MarkupSafe==2.0.1
python-engineio==4.3.0
python-socketio==5.5.0
typing_extensions==4.0.0
Werkzeug==2.0.2
zipp==3.6.0
zope.event==4.5.0
zope.interface==5.4.0我在我的Procfile中使用以下命令运行应用程序
web: gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 application:app这个应用程序不工作,它的页面显示要检查日志。当我检查日志时,我看到这个错误:at=error code=H12 desc="Request timeout" method=GET path="/favicon.ico" host=test-flasksocket.herokuapp.com request_id=c0acb584-c18e-4c86-ba4c-3d176de5b3ed fwd="174.134.134.150" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0 protocol=https
此外,在日志中,此文本会无限期重复:
[2021-11-28 04:36:17 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:17)
[2021-11-28 04:36:17 +0000] [17] [INFO] Worker exiting (pid: 17)
[2021-11-28 04:36:17 +0000] [19] [INFO] Booting worker with pid: 19
* Serving Flask app 'application' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)我以为gunicorn是一个生产服务器,但它看起来是一个开发服务器?
发布于 2021-11-28 07:17:54
我发现了问题所在。需要像这样调用run方法:
if __name__ == "__main__":
app.run()我不知道为什么在这个块之外运行app.run()会导致我遇到的问题,但它似乎是这样的。
https://stackoverflow.com/questions/70140952
复制相似问题