首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask-Socketio应用程序在Heroku上出现超时错误

Flask-Socketio应用程序在Heroku上出现超时错误
EN

Stack Overflow用户
提问于 2021-11-28 05:41:10
回答 1查看 70关注 0票数 0

抱歉,我是web开发的新手,我正在尝试在Heroku上安装一个flask-socketio应用程序,方法是使用gunicorn和gevent-websocket来支持WebSocket。然而,这个应用程序不能工作。为了更好地说明这个问题,我设置了一个简单的示例。

这是我的application.py (这里不使用套接字,但在实际版本中使用)

代码语言:javascript
复制
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()

代码语言:javascript
复制
<!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文件

代码语言:javascript
复制
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中使用以下命令运行应用程序

代码语言:javascript
复制
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

此外,在日志中,此文本会无限期重复:

代码语言:javascript
复制
[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是一个生产服务器,但它看起来是一个开发服务器?

EN

回答 1

Stack Overflow用户

发布于 2021-11-28 07:17:54

我发现了问题所在。需要像这样调用run方法:

代码语言:javascript
复制
if __name__ == "__main__":
    app.run()

我不知道为什么在这个块之外运行app.run()会导致我遇到的问题,但它似乎是这样的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70140952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档