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

使用Heroku部署基于praw的Reddit机器人部署失败求助

问题排查与修复方案

1. Procfile配置错误

你当前的Procfile声明了web进程用gunicorn启动skb:app,但存在两个核心问题:

  • 你的skb.py是定时执行的机器人脚本,不是Web服务,gunicorn是用于启动WSGI Web应用的工具,完全不适用该场景
  • skb.py中根本没有定义名为app的变量,gunicorn启动时找不到对应实例必然报错
    修正方案:将Procfile内容替换为
worker: python skb.py

部署到Heroku后需要到后台资源页关闭默认启动的web进程,打开worker进程。同时可以把requirements.txt里的gunicorn==20.0.4依赖删除,该场景下不需要用到。

2. 回复参数格式错误

你代码中定义的回复内容是列表类型:

joke_reply = ["CAUSE IT'S A JOKE OHH OHHHH OHHHHHHHHH"]

而PRAW的comment.reply()方法只接收字符串类型的参数,传入列表会触发类型错误。修正方案:把列表改为普通字符串:

joke_reply = "CAUSE IT'S A JOKE OHH OHHHH OHHHHHHHHH"

3. 可选稳定性优化

Heroku的worker进程运行过程中如果遇到接口请求失败等异常会直接退出,可添加循环和异常捕获逻辑提升稳定性,参考修改后的完整代码:

import praw
import time

reddit = praw.Reddit(  
        user_agent="redacted" ,
        client_id="redacted",
        client_secret="redacted",
        username="redacted",
        password="redacted",)

subreddit = reddit.subreddit("comedy")

joke_reply = "CAUSE IT'S A JOKE OHH OHHHH OHHHHHHHHH"

while True:
    try:
        for submission in subreddit.hot(limit=10):
            for comment in submission.comments:
                if hasattr(comment,"body"):
                    comment_lower = comment.body.lower()
                    if " a joke " in comment_lower:
                        print(comment.body)
                        comment.reply(joke_reply)
                        time.sleep(66)
    except Exception as e:
        print(f"运行出错:{e}")
        time.sleep(10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:15:03