Sequelize:在生产中更改模型架构

我们正在使用 orm sequelize.js 并定义了这样的模型:

We're using the orm sequelize.js and have defined a model as such:

module.exports = function(sequelize, DataTypes) {
    var Source = sequelize.define('Source', {
        name: {
            type: DataTypes.STRING, 
            allowNull: false, 
            unique: true
        }
    }, {
        paranoid: true
    });

    return Source;
};

这被部署到生产环境并使用 sequelize.sync 同步到数据库.下一步,我们添加一个参数:

This is deployed to production and sync'd to the database using sequelize.sync. Next step, we add a parameter:

module.exports = function(sequelize, DataTypes) {
    var Source = sequelize.define('Source', {
        name: {
            type: DataTypes.STRING, 
            allowNull: false, 
            unique: true
        }, 
            location: {
                    type: DataTypes.STRING
            }
    }, {
        paranoid: true
    });

    return Source;
};

但是,当部署到生产环境时,sequelize.sync 不会添加这个新参数.这是因为 sync 做了一个:

However, when deploying to production sequelize.sync does not add this new parameter. This is because sync does a:

如果不存在则创建表

如果表存在,则实际上不会更新架构.这是在他们的文档中注明的.

And does not actually update the schema if the table exists. This is noted in their documentation.

唯一的选择似乎是 { force: true },但这对于生产数据库来说是不行的.

The only option seems to be to { force: true }, however this is not okay for a production database.

有谁知道在需要更改时如何正确更新架构?

Does anyone know how to properly update the schema when changes are necessary?

推荐答案

你想实现 Sequelize 迁移:

You want to implement Sequelize migrations:

http://docs.sequelizejs.com/manual/tutorial/migrations.html

这些将使您能够在已知状态之间转换开发人员、暂存和生产数据库.

These will enable you to transition developer, staging, and production databases between known states.

相关文章