【问题标题】:Why does this Procfile cause frequent data loss?为什么这个Procfile会导致频繁的数据丢失?
【发布时间】:2020-11-28 13:01:15
【问题描述】:

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

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 创建一个表,那么一切都会正常运行。

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

【问题讨论】:

    标签: node.js postgresql heroku heroku-postgres


    【解决方案1】:

    不要在您的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 之类的方式安排该命令运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多