2013-07-17 19 views
16

Używamy ORM sequelize.js i zdefiniowaniu modelu, takie jak:Sequelize: Zmiana modelu schematu na produkcji

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

    return Source; 
}; 

ten jest wdrażany do produkcji i zsynchronizowane z bazą danych przy użyciu sequelize.sync. Następnym krokiem, dodamy parametr:

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; 
}; 

Jednak podczas wdrażania do produkcji sequelize.sync nie dodać nowy parametr. To dlatego sync robi:

CREATE TABLE IF NOT EXISTS

I faktycznie nie zaktualizować schemat, jeśli tabela istnieje. To jest noted in their documentation.

Jedyną opcją wydaje się być { force: true }, jednak nie jest to w porządku dla produkcyjnej bazy danych.

Czy ktoś wie, jak poprawnie zaktualizować schemat, gdy zmiany są konieczne?

Odpowiedz

18

chcesz wprowadzić migracje Sequelize:

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

To pozwoli na przejście deweloper, inscenizację i baz produkcyjnych pomiędzy znanymi stanach.

+1

Uratowałeś mój dzień! –

+0

Mam pytanie wokół tego. Mogę użyć sequelize-cli do stworzenia nowego modelu i odpowiadającego mu skryptu migracji przy użyciu modelu sequelize: create, który tworzy model i skrypt migracji, czy istnieje sposób, w jaki można to zrobić, dodając nowe kolumny lub ograniczenia. Czy musimy ręcznie pisać skrypty migracji dla tych zadań lub czy istnieje sposób automatycznego generowania skryptów migracji? –

+1

to jest problem z sequelize musimy pisać ręcznie skrypty mig geez! –

Powiązane problemy