You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord Bot API命令本地运行正常但部署Heroku后失效如何解决?

Discord Bot汇率命令Heroku部署失败解决方法

1 优先排查依赖配置

这是最常见的问题,Heroku会自动根据项目根目录的requirements.txt安装依赖,你本地环境已经安装了requests库,但如果没写到配置文件里,部署后运行会直接抛出模块不存在错误,命令无法执行。
请确认requirements.txt包含以下内容(版本号可匹配你本地使用的版本):

discord.py>=2.0.0
requests>=2.28.0

修改后重新提交代码部署即可。

2 检查Procfile配置

Discord Bot属于后台worker进程,不需要对外提供web服务,你的Procfile必须配置为worker启动,不能用web进程,否则Heroku会因为进程没监听端口,超时后自动杀掉进程,导致所有命令无响应:

worker: python 你的主程序文件名.py

部署后到Heroku应用后台的资源页,确认worker进程处于开启状态。

3 增加异常捕获定位具体问题

你现有代码没有任何错误处理逻辑,一旦API请求超时、返回异常、JSON结构变动,都会直接崩溃无法看到具体原因,可按如下方式修改代码增加错误日志:

@bot.command()
async def doviz(ctx):
    try:
        # 增加超时参数避免请求长时间卡住
        resp = requests.get('https://api.genelpara.com/embed/doviz.json', timeout=10)
        # 校验请求状态码是否正常
        resp.raise_for_status()
        results = resp.json()
        usd_satis = results['USD']['satis']
        eur_satis = results['EUR']['satis']
        gbp_satis = results['GBP']['satis']
        
        embed = discord.Embed(title="Kur Fiyatları", description="Empty")
        embed.add_field(name="USD: ", value=f"{usd_satis}")
        embed.add_field(name="EUR: ", value=f"{eur_satis}")
        embed.add_field(name="GBP: ", value=f"{gbp_satis}")
        await ctx.send(embed=embed)
    except Exception as e:
        # 错误信息会输出到Heroku日志面板
        print(f"汇率查询错误: {str(e)}")
        await ctx.send(f"查询失败,错误信息:{str(e)}")

修改部署后调用一次命令,到Heroku应用后台的日志页面查看具体报错:

  • 若为模块不存在错误:回到第一步补全依赖即可
  • 若为网络连接错误:可确认当前使用的汇率API是否屏蔽了Heroku的IP段,更换其他公开汇率API即可
  • 若为键值不存在错误:说明API返回的JSON结构发生了调整,对应修改解析逻辑即可

内容的提问来源于stack exchange,提问作者Midoss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:15:01