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

Heroku上Node.js Discord Bot全局变量丢失问题求助

问题原因

Heroku的所有Dyno(包括你升级的Basic版本)都会定期重启——官方默认每天至少重启一次,遇到资源调度调整、平台维护等情况也会触发重启。你的全局变量存在Node.js进程的内存里,一旦Dyno重启,进程重新启动,内存里的所有数据都会被清空,这就是间隔久了第二个命令失败的核心原因。

你之前误以为只有Worker Dyno休眠才会丢失数据,但休眠是Dyno停止运行,重启则是完全重新加载进程,两种情况都会导致内存数据丢失;而且Basic Dyno不会休眠,但重启机制依然存在。

解决方案

放弃用内存全局变量存储时间,改用持久化存储方案:

  • Heroku PostgreSQL:Heroku提供免费的PostgreSQL实例,适合存储结构化数据,你可以创建一张简单的表,专门记录设置的时间戳。
  • Redis:如果只是存单个键值对,Redis更轻量、读写速度快,Heroku也有免费的Redis附加组件可选。
  • 不推荐本地文件存储:Heroku的Dyno文件系统是临时的,重启后文件会恢复到部署时的初始状态,存文件同样会丢失数据。

实现示例(以Redis为例,伪代码):
设置命令:

// 连接Redis
const redis = require('redis');
const client = redis.createClient(process.env.REDIS_URL);

// 记录时间
client.set('recorded_time', Date.now().toString(), (err) => {
  if (err) { /* 处理错误逻辑 */ }
  // 发送Discord提示消息
});

获取命令:

client.get('recorded_time', (err, storedTime) => {
  if (!storedTime) { /* 返回失败提示 */ }
  const timeDiff = Date.now() - parseInt(storedTime);
  // 转换为易读时长并发送消息
});

内容的提问来源于stack exchange,提问作者Tom S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:25:13