web-dev-qa-db-ja.com

続編:本番環境でのモデルスキーマの変更

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 }のようですが、これは本番データベースでは問題ありません。

変更が必要なときにスキーマを適切に更新する方法を知っている人はいますか?

20
Matt

Sequelizeの移行を実装する必要があります。

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

これらにより、開発者、ステージング、および本番データベースを既知の状態間で移行できます。

23
Dan Kohn

より速い方法は、{alter: true}オプションを使用することです。

参照: https://sequelize.org/master/class/lib/sequelize.js~Sequelize.html#instance-method-sync

0
Saro