使用GitHub Desktop部署Discord.py至Heroku遇构建失败及H14错误求助
搞定Heroku H14错误:无Web进程运行的问题
嘿,我来帮你梳理下这个问题——你遇到的H14错误其实和你的Discord机器人部署逻辑直接相关,咱们一步步拆解:
首先,先明确错误原因:你部署的是一个Discord机器人,Procfile里定义的是worker: python economia.py(这是后台运行的进程,不是web服务),但你尝试访问Heroku分配给你的web域名,这时候Heroku找不到运行的web进程,自然就抛出H14错误了。
从你提供的Heroku日志也能看出来,目前只有构建成功和web访问失败的记录,完全没有worker进程启动的日志——这说明你的worker dyno可能还没被激活,这也是机器人可能没正常运行的关键!
解决步骤分两种情况:
情况1:你不需要web页面,只想让Discord机器人跑起来
这时候H14错误其实不影响机器人的运行,你只需要激活worker dyno就行:
- 打开Heroku控制台,找到你的
billionaireboysclub应用 - 切换到「Resources」标签页
- 找到「worker python economia.py」这一项,把旁边的开关打开(默认可能是关闭的)
- 点击「Save Changes」,Heroku就会启动worker进程运行你的机器人
- 之后你可以再看Heroku日志,如果出现机器人的启动、登录Discord的相关日志,就说明成功了
情况2:你需要一个web页面(比如做健康检查、展示机器人信息)
如果确实需要web服务,你得给应用加个简单的web服务器,同时保留worker进程:
- 在你的项目里添加一个web服务文件(比如
web.py),用Flask写个最简单的响应:import os from flask import Flask app = Flask(__name__) @app.route('/') def home(): return "Billionaire Boys Club Bot is running!" if __name__ == '__main__': app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 5000))) - 修改
requirements.txt,添加Flask依赖:discord.py Flask==2.0.1 - 更新Procfile,同时定义web和worker进程:
web: python web.py worker: python economia.py - 重新部署到Heroku后,回到「Resources」标签页,把web和worker的开关都打开
- 这时候再访问你的Heroku域名,就能看到web页面的内容,也不会有H14错误了
另外提个小注意:Heroku的免费dyno会在30分钟无活动后休眠,对于worker进程来说,Discord的心跳机制一般能保持它活跃,但如果是web进程,你可能需要用外部工具定期ping你的web地址来防止休眠。
内容的提问来源于stack exchange,提问作者Cip




