Heroku自动部署Discord.js机器人后数据库配置丢失求助
解决Heroku部署Discord机器人后数据库内容丢失的问题
核心原因
Heroku的文件系统是临时且短暂的——每次部署、dyno重启或休眠唤醒时,本地存储的文件都会被重置为GitHub仓库的初始状态。如果你的数据库文件(比如SQLite的.db文件)存在项目本地目录,部署后之前的配置数据自然会丢失。
具体解决办法
改用外部云数据库服务
放弃本地文件型数据库,使用PostgreSQL(Heroku自带免费额度)、MySQL或MongoDB Atlas这类云数据库。数据存储在Heroku外部,不受部署重置影响。以PostgreSQL为例,在Heroku后台添加对应插件后,通过环境变量DATABASE_URL获取连接信息,在代码中用这个URL连接数据库,而非本地文件路径。禁止数据库文件进入Git版本控制
如果只是临时测试想用本地数据库,把数据库文件添加到.gitignore里,避免提交到GitHub。但要注意,Heroku临时文件系统仍会在dyno重启时丢失数据,仅适合测试场景。使用Heroku持久化存储插件
可以借助Heroku的第三方持久化存储插件(比如Heroku Redis、专用文件存储插件),将数据库文件挂载到持久化卷上。不过这种方式对文件型数据库的稳定性和性能不如专用云数据库,仅适合特定场景。调整部署时的数据库初始化逻辑
检查部署脚本或启动命令,是否每次部署都会执行数据库重置操作(比如DROP TABLE后重新CREATE TABLE)。如果有,修改逻辑为仅在数据库无对应表时才执行初始化,而非每次部署都清空数据。
内容的提问来源于stack exchange,提问作者Wreaking
相关产品推荐
相关产品推荐

