如何通过sequelize-postgres数据库和迁移在服务器重启后幸存下来
How to survive server restart with sequelize postgres database and migrations
在我的express应用程序中,我使用Sequelize来管理数据库。这是我的引导程序代码。
db.sequelize
.sync({ force: true})
.complete(function(err) {
if (err) {
throw err[0];
} else {
//seed
require('../db/seed')(db);
app.listen(app.get('port'), function() {
console.log('express listening on ' + app.get('port'));
});
}
});
正如你所看到的,每次我首先启动服务器时,我都会用硬编码的数据为数据库播种。
以下是初始化sequelize的代码:
if (process.env.NODE_ENV === 'test') {
console.log('[test] using in memory database');
sequelize = new Sequelize('marbles-site-db', null, null, {
dialect: 'sqlite',
storage: ':memory:'
});
} else if (process.env.HEROKU_POSTGRESQL_WHITE_URL) {
var match = process.env.HEROKU_POSTGRESQL_WHITE_URL
.match(/postgres:'/'/([^:]+):([^@]+)@([^:]+):('d+)'/(.+)/);
sequelize = new Sequelize(match[5], match[1], match[2], {
dialect: 'postgres',
protocol: 'postgres',
port: match[4],
host: match[3],
logging: true // false
});
} else {
sequelize = new Sequelize('marbles-site-db', null, null, {
dialect: 'sqlite',
storage: './db/development.sqlite'
});
}
正如您所看到的,我使用带有flat file
的SQlite作为开发的存储,使用Postgres作为生产的存储。
问题是每次我重新启动服务器时,数据库中的数据都不见了。SQlite就是这样,我想Postgres也是如此。
那么,即使重新启动服务器,我也必须做些什么才能将数据保留在数据库中?这与数据库迁移有关吗?
请注意,初始引导之后不应该需要种子。
sync({ force: true })
主要用于测试,包括用户测试和内部测试。
sync()
做CREATE TABLE IF NOT EXISTS
,因此理论上可以在生产环境中使用,因为它永远不会破坏任何现有数据。然而,如果您在模型中更改了模式,那么如果您只同步,那么这将不会反映在DB中
因此,在生产环境中,您将需要迁移。这意味着你们两个都需要更改序列化模型,并在每次更改某个内容时编写一个迁移。有人说,当序列化模型文件更改#120时,可以自动创建迁移,但目前还没有对此进行任何工作
请注意sequelize.sync方法在代码开始时重置所有数据。也许您可以在不使用sync()方法的情况下生成另一个解决方案
相关文章:
- 如何在Javascript中定义一个简单的自动重启倒计时
- MDN文档中关于弄清楚XUL元素的段落是什么意思:“如何将覆盖扩展转换为无重启”
- 如何修复IE 9中的文档模式重启
- 卡斯珀/幻影崩溃并自动重启
- 新闻自动收报机 - 过早重启
- 在 iframe 中重定向服务器端加载
- 游戏重启Javascript/Jquery
- 重启CSS3动画后's停止
- 我的功能无法重启的原因是什么?
- 如果扩展被禁用,firefox重启后无法重新启用该扩展
- Three.js在单页webapp中正确重启场景
- popcorn.js可以检测切换视频,无需重启即可继续
- HTML5视频无法重启
- HTML5视频javascript控件-重启视频
- Webpack不会在不重启服务器的情况下将更改捆绑到某些文件中
- 更新文件时不需要重启Node.js中的服务器
- Tomcat修改javascript文件无需重启服务器
- 路由器登录/重启的无头自动化在服务器上失败了,但使用CasperJS在本地工作
- 在不关闭套接字的情况下重启实时node.js服务器
- Node.js:优雅的重启和服务器正常运行时间,如何操作