使用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
相关产品推荐
相关产品推荐

