2013-07-17 8 views
16

Wir verwenden die ORM sequelize.js und haben ein Modell als solche definiert:Sequelize: Ändern Modellschema auf die Produktion

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

    return Source; 
}; 

Diese zur Produktion eingesetzt wird und in die Datenbank synchronisierten sequelize.sync verwenden. Im nächsten Schritt fügen wir einen 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; 
}; 

Wenn jedoch der Produktion bereitstellen sequelize.sync nicht diese neuen Parameter hinzuzufügen. Dies liegt daran, sync tut ein:

CREATE TABLE IF NOT EXISTS

und aktualisiert nicht eigentlich das Schema, wenn die Tabelle vorhanden ist. Dies ist noted in their documentation.

Die einzige Option scheint { force: true } zu sein, dies ist jedoch für eine Produktionsdatenbank nicht in Ordnung.

Kann jemand das Schema richtig aktualisieren, wenn Änderungen notwendig sind?

Antwort

18

Sie wollen Sequelize Migrationen implementieren:

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

Dies ermöglicht es Ihnen, Entwickler zu überführen, Staging und Produktionsdatenbanken zwischen bekannten Zuständen.

+1

Sie haben meinen Tag gerettet! –

+0

Ich habe eine Frage dazu. Ich kann sequelize-cli verwenden, um ein neues Modell und das zugehörige Migrationsskript zu erstellen, indem ich sequelize model: create verwende, das ein Modell und das Migrationsskript erstellt. Kann ich beim Hinzufügen neuer Spalten oder Einschränkungen auf die gleiche Weise vorgehen. Müssen wir die Migrationsskripte für diese Aufgaben manuell schreiben oder gibt es eine Möglichkeit, die Migrationsskripte automatisch zu generieren? –

+1

das ist das problem mit sequelize wir müssen manuell schreiben mig scripts geez! –