为什么这个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.
之类的方式将该命令安排到 运行
我有这个 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.
之类的方式将该命令安排到 运行