Sequelize: изменение схемы модели при производстве - программирование
Подтвердить что ты не робот

Sequelize: изменение схемы модели при производстве

Мы используем orm sequelize.js и определили модель как таковую:

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

    return Source;
};

Это развертывается для производства и синхронизации с базой данных с помощью sequelize.sync. Следующий шаг добавим параметр:

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 выполняет:

CREATE TABLE IF NOT EXISTS

И фактически не обновляет схему, если таблица существует. Это отмечено в их документации.

Единственный вариант, по-видимому, относится к { force: true }, однако это не подходит для производственной базы данных.

Кто-нибудь знает, как правильно обновлять схему, когда необходимы изменения?

4b9b3361

Ответ 1

Вы хотите реализовать миграцию Sequelize:

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

Это позволит вам осуществлять переход между базами данных разработчика, промежуточных и производственных баз данных между известными состояниями.