为什么这个Procfile会导致数据频繁丢失?

Why does this Procfile cause frequent data loss?

我有这个 Procfile,所以当我部署到 Heroku 时,我的 tables 将使用我创建,一些随机数据将被播种。有效。

web: knex migrate:rollback && knex migrate:latest && knex seed:run && node index.js

问题是,例如,当我通过这样的 POST 请求插入一些数据时:

router.post('/', async function (req, res) {
   await db.insert(req.body).into('customer');
   res.send(req.body)
})

我收到 200 条成功消息,数据已保存,但 30 分钟后我丢失了数据。如果我检查以前发布的数据是否消失了。如果我在没有这个 Procfile 的情况下做同样的事情,并且我从 CLI 创建了一个 table,那么一切都会像它应该的那样工作。

为什么这 Procfile 会导致我的数据丢失?

不要在 web 流程中执行此类维护任务。 Dynos restart all the time for a variety of reasons,每天至少一次,只要发生这种情况,您的数据库重置逻辑就会被调用。

如果您只想在部署新版本时执行此操作,请考虑将其作为 release phase task:

release: knex migrate:rollback && knex migrate:latest && knex seed:run
web: node index.js

但是请注意,发布阶段的命令也会由很多事情触发,包括对大多数配置变量(环境变量)的更改。

如果您需要比这更精细的控制,也许您应该 运行 手动回滚/迁移/种子命令。或者,如果您希望按某个时间表重置数据库,例如每天或每周,您可以使用 Heroku Scheduler.

之类的方式将该命令安排到 运行