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?
Uratowałeś mój dzień! –
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? –
to jest problem z sequelize musimy pisać ręcznie skrypty mig geez! –