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

Strapi应用部署到Heroku后每次本地更新推送就丢失数据是什么原因?

Strapi部署Heroku推送更新后数据丢失原因及修复方案

可能的核心原因

1. 未关闭生产环境自动数据迁移配置

  • Strapi v4及以上版本默认开启自动Schema迁移,如果你没有在config/env/production/database.js中显式设置autoMigration: false,每次部署重启服务时,只要你本地修改了内容类型结构,服务启动会自动重建对应数据库表,直接清空原有表内的全部业务数据。
  • 管理员账号密码默认存储在strapi_administrator相关表中,自动迁移也会重置这部分表结构,最终导致管理员账号被清空。

2. 未正确绑定Heroku Postgres数据库

  • 如果你本地开发用的是默认SQLite数据库,且没有配置Strapi生产环境读取Heroku的Postgres数据库参数,那么Strapi在Heroku上实际还是运行在临时文件系统的SQLite数据库上:Heroku的临时文件系统每次部署、重启都会被完全重置,所有存储在SQLite里的数据自然会全部丢失,哪怕你已经在Heroku后台创建了Postgres数据库也不会生效。
  • 排查方式:进入Heroku应用后台的「Settings」页面,查看Config Vars中是否存在DATABASE_URL变量,再确认你的Strapi生产环境数据库配置是读取该环境变量,而非写死的本地SQLite路径。

3. 构建脚本包含清空数据库的命令

  • 如果你在package.json的build或heroku-postbuild脚本中配置了strapi reset、strapi db:drop之类的命令,每次推送部署执行构建流程时,会主动清空数据库全部数据。
  • 若开启了Strapi的初始化种子功能且种子文件配置逻辑错误,也可能在每次服务启动时覆盖原有数据。

快速修复步骤

  1. 修改Strapi生产环境数据库配置,关闭自动迁移,参考配置如下:
module.exports = ({ env }) => ({
  connection: {
    client: 'postgres',
    connection: {
      connectionString: env('DATABASE_URL'),
      ssl: { rejectUnauthorized: false },
    },
    useNullAsDefault: true,
    autoMigration: false, // 新增该行,禁止自动重置表结构
  },
});
  1. 确认所有生产环境数据库配置读取的是Heroku提供的DATABASE_URL环境变量,删除所有硬编码的本地数据库参数。
  2. 检查package.json的所有脚本配置,删除会清空数据库的相关命令。
  3. 首次修复部署后手动重新创建管理员账号,后续推送更新不会再出现数据清空问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:15:08