如何生存服务器重新启动与segelize postgres数据库和迁移

在我的快速应用程序中,我使用Sequelize来pipe理数据库。 这是我的引导代码。

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 })主要用于testing,用户testing和内部testing都是在续集中进行的。

sync()CREATE TABLE IF NOT EXISTS ,所以它可以在理论上用于生产设置,因为它不会破坏任何现有的数据。 但是,如果您在模型中更改模式,那么如果只进行同步,则不会反映在数据库中

所以,在生产环境中,您将需要迁移。 这意味着你们都需要改变你的sequelize模型,并且在你每次操作时写一个迁移。 有关于当sequelize模型文件改变#120时能够自动创build迁移的讨论,但还没有完成工作