Sequelize.js: taşıma ve senkronizasyon nasıl kullanılır?


137

Projemi başlatmaya hazırım. Lansmandan sonra büyük planlarım var ve veritabanı yapısı değişecek - mevcut tablolardaki yeni sütunların yanı sıra yeni tablolar ve mevcut ve yeni modellerle yeni ilişkilendirmeler.

Ben sadece veritabanı her değiştiğinde silmeyi umursamadım test verileri vardı, Sequelize henüz taşıma dokunmadı.

Bu amaçla, sync force: truemodel tanımlarını değiştirdiysem şu anda uygulamam başlatıldığında çalışıyorum . Bu, tüm tabloları siler ve sıfırdan yapar. forceSadece yeni tablolar oluşturma seçeneğini atlayabilirim . Ancak mevcut olanlar değiştiyse, bu yararlı değildir.

Göçleri eklediğimde işler nasıl çalışır? Açıkçası ben mevcut tablolar (içinde veri ile) silinmesini istemiyorum, bu yüzden sync force: truesöz konusu. Uygulamanın dağıtım prosedürünün bir parçası olarak geliştirilmesine yardımcı olduğum diğer uygulamalarda (Laravel ve diğer çerçeveler) bekleyen taşıma işlemlerini çalıştırmak için taşıma komutunu çalıştırıyoruz. Ancak bu uygulamalarda ilk geçişin, iskelet veritabanına sahip olması, veritabanının geliştirilmesinde bir süre önce olduğu durumdaydı - ilk alfa sürümü veya başka bir şey. Böylece, partiye geç uygulamanın bir örneği bile, tüm geçişleri sırayla çalıştırarak tek seferde hız kazanabilir.

Sequelize'de böyle bir "ilk göçü" nasıl oluştururum? Eğer bir tane yoksa, uygulamanın bir şekilde yeni bir örneği, geçişleri çalıştırmak için iskelet veritabanı içermez veya başlangıçta senkronizasyonu çalıştırır ve veritabanını tümüyle yeni duruma getirir yeni tablolar vb., ancak daha sonra taşıma işlemlerini gerçekleştirmeye çalıştıklarında, orijinal veritabanı ve birbirini izleyen her yinelemeyi akıllarında bulundukları için mantıklı olmazlar.

Düşünme sürecim: her aşamada, ilk veritabanı artı sırayla yapılan her geçiş, aşağıdaki durumlarda oluşturulan veritabanına eşit olmalıdır (artı veya eksi veri) sync force: trueçalıştırılır. Bunun nedeni koddaki model açıklamalarının veritabanı yapısını tanımlamasıdır. Bu nedenle, belki de bir geçiş tablosu yoksa, senkronize olmayız ve çalıştırılmasalar bile tüm taşıma işlemlerini tamamlanmış olarak işaretleriz. Yapmam gereken bu mu (nasıl?), Ya da Sequelize'in bunu kendisi yapması mı gerekiyor, yoksa yanlış ağacı havlıyor muyum? Ve eğer doğru alandaysam, eski modeller göz önüne alındığında, bir göçün çoğunu otomatik olarak oluşturmanın güzel bir yolu olmalı (taahhüt karma ile? Hatta her göç bir taahhüde bağlı olabilir mi? taşınabilir olmayan git merkezli bir evrende) ve yeni modeller. Yapıyı farklılaştırabilir ve veritabanını eskiden yeniye ve geriye dönüştürmek için gerekli komutları üretebilir ve daha sonra geliştirici içeri girebilir ve gerekli değişiklikleri yapabilir (belirli verileri silme / geçiş vb.).

Ben --initkomut ile sequelize ikili çalıştırdığınızda bana boş bir göç dizini verir. Sonra çalıştırdığımda sequelize --migratebana hiçbir şey, başka bir tablo ile bir SequelizeMeta tablo yapar. Açıkçası değil, çünkü bu ikili benim app bootstrap ve modelleri yüklemek için nasıl bilmiyor.

Bir şey eksik olmalıyım.

TLDR: Uygulamamı ve geçişlerini, canlı uygulamanın çeşitli örneklerinin yanı sıra eski başlangıç ​​veritabanı olmayan yepyeni bir uygulamanın güncellenebilmesi için nasıl ayarlayabilirim?


2
İş akışınızla ilgili olarak yanıtladım, ancak İdeal olarak tüm Tablolar Geçişler kullanılarak ayarlanmalıdır. Şimdilik kullanıyor olsanız bile sync, fikir, geçişlerin tüm veritabanını "oluşturduğu" için bir iskelete güvenmek kendi başına bir problemdir. Örneğin Ruby on Rails iş akışı, her şey için Geçişler kullanır ve buna alıştığınızda oldukça harika. Edit: Ve evet, bu sorunun oldukça eski olduğunu fark ettim, ama hiç tatmin edici bir cevap olmamış gibi görmek ve insanlar buraya rehberlik arıyor gelebilir, ben katkıda gerektiğini düşündüm.
Fernando Cordeiro

Yanıtlar:


88

"İlk taşıma" yı oluşturma

Sizin durumunuzda, en güvenilir yol neredeyse manuel olarak yapmaktır. Sequelize-cli aracını kullanmanızı öneririm . Sözdizimi oldukça basittir:

sequelize init
...
sequelize model:create --name User --attributes first_name:string,last_name:string,bio:text

Bu hem model VE hem de taşıma oluşturur. Ardından, mevcut modellerinizi sequelize-cli ile oluşturulanlarla manuel olarak birleştirin ve bunları taşımalarla yapın. Bunu yaptıktan sonra veritabanını silin (mümkünse) ve çalıştırın

sequelize db:migrate

Bu şema irade taşıma oluşturur. Şema geliştirmelerinin uygun sürecine geçmek için bunu sadece bir kez yapmalısınız (senkronizasyon olmadan: kuvvet, ancak yetkili geçişlerle).

Daha sonra, şemayı değiştirmeniz gerektiğinde:

  1. Taşıma oluşturun: sequelize migration:create
  2. Taşıma dosyanıza yukarı ve aşağı işlevleri yazma
  3. Taşıma dosyasındaki değişikliklerinize göre modelinizi manuel olarak değiştirin
  4. Çalıştırmak sequelize db:migrate

Üretimde göç taşıma

Açıkçası üretim sunucusuna ssh edemez ve el ile taşıma işlemleri gerçekleştiremezsiniz. Uygulama başlamadan önce bekleyen geçişleri gerçekleştirmek için Node.JS için umzug , framework agnostic migration aracını kullanın .

Bekleyen / henüz yürütülmemiş taşıma işlemlerinin bir listesini şu şekilde alabilirsiniz:

umzug.pending().then(function (migrations) {
  // "migrations" will be an Array with the names of
  // pending migrations.
}); 

Ardından taşıma işlemini gerçekleştirin ( geri arama içinde ). Execute yöntemi, belirtilen her geçiş için ilgili işlevi çalıştıran genel amaçlı bir işlevdir:

umzug.execute({
  migrations: ['some-id', 'some-other-id'],
  method: 'up'
}).then(function (migrations) {
  // "migrations" will be an Array of all executed/reverted migrations.
});

Benim önerim, uygulama başlamadan ve her seferinde rotaları sunmaya çalışmadan önce bunu yapmaktır. Bunun gibi bir şey:

umzug.pending().then(function(migrations) {
    // "migrations" will be an Array with the names of
    // pending migrations.
    umzug.execute({
        migrations: migrations,
        method: 'up'
    }).then(function(migrations) {
        // "migrations" will be an Array of all executed/reverted migrations.
        // start the server
        app.listen(3000);
        // do your stuff
    });
});

Bunu şu anda deneyemiyorum, ama ilk bakışta işe yarayacak.

UPD Nisan 2016

Bir yıl sonra, hala yararlı, bu yüzden mevcut ipuçlarını paylaşıyorum. Şimdilik, sequelize-clipaketi canlı bağımlılık olarak yüklüyorum ve NPM başlangıç ​​komut dosyalarını şu şekilde değiştiriyorum package.json:

...
"scripts": {
  "dev": "grunt && sequelize db:migrate && sequelize db:seed:all && node bin/www",
  "start": "sequelize db:migrate && sequelize db:seed:all && node bin/www"
},
...

Üretim sunucusunda yapmam gereken tek şey npm start. Bu komut tüm geçişleri çalıştırır, tüm ekicileri uygular ve uygulama sunucusunu başlatır. Umzug'u manuel olarak aramanıza gerek yok.


3
Bu aradığım şey gibi geliyor. "Olması gerektiği" kadar sihirli ve otomatik görünmüyor, ama belki de umulması gereken en iyisi bu. Ancak, şu anda Sequelize ile çalışmıyorum ve yakın zamanda test edemeyeceğim. Ama eğer birisi bu çözümün iyi olduğunu kabul ederse, bu cevabı kabul edeceğim. Model sürümleri arasındaki farklardan bu geçişleri otomatik olarak yapmanın bir yolu olmadığı anlaşılıyor.
tremby

4
@tremby modelleri gerçekten anlayan tek çerçeve Django'ydu. Modelleri analiz eder ve "Kullanıcı adındaki alan adını first_name olarak yeniden adlandırdığınız anlaşılıyor. Bunun için taşıma oluşturmak ister misiniz?" Django'da neredeyse sihirli bir şekilde çalışıyor, kullandığım diğer araçlar da yukarıda bahsettiğim aynı göç yaklaşımını varsayıyor: göçleri kendiniz yazmaktan, mevcut model durumlarınız için gerçekte hangi türden eklenecek alanın derinlemesine anlaşılmasından
f1nn

2
Bundan kurtulabilirsin pendingve sonra executesadece yapabilirsin umzug.up().then(function (migrations) { app.listen(3000); }). Umzug belgelerine göre, bu beklemedeki tüm taşıma işlemlerini gerçekleştirecektir.
Vinay

Taşıma işlemini tamamladığınızda, alanları orijinal model dosyasındaki şemaya eklemek yaygın mıdır?
theptrk

@ f1nn Kurulumunuzla ilgili bir sorum var, uygulama kümelemesini ve kullanılabilirliğini nasıl ele alıyorsunuz? PM2'yi iş akışımla bütünleştireceğim ve belki de npm komut dosyalarıyla doğrudan çalışmaz.
diosney

17

Sadece bunu kendim öğreniyorum, ama bence şimdi göçleri kullanmanızı tavsiye ederim böylece onlara alışın. Göçte neler olduğunu anlamak için en iyi şeyi buldum tarafından oluşturulan tablolarda sql bakmak sequelize.sync()ve sonra oradan göç inşa etmektir.

migrations -c [migration name] 

Bir taşıma dizininde şablon taşıma dosyasını oluşturur. Daha sonra, onu oluşturmanız gereken alanlarla doldurabilirsiniz. Bu dosyanın createdAt/ updatedAt, ilişkilendirmeler için gerekli alanları vb. İçermesi gerekir.

İlk tablo oluşturmak için aşağıdakiler olmalıdır:

migration.dropTable('MyTable');

Ancak, tablo yapısındaki sonraki güncellemeler bunu dışlayabilir ve sadece tablo değiştirebilir.

./node_modules/.bin/sequelize --migrate

Bir örnek oluşturma şöyle görünecektir:

module.exports = {
  up: function(migration, DataTypes, done) {
    migration.createTable(
        'MyTable',
        {
          id: {
            type: DataTypes.INTEGER,
            primaryKey: true,
            autoIncrement: true
          },
          bigString: {type: DataTypes.TEXT, allowNull: false},
          MyOtherTableId: DataTypes.INTEGER,
          createdAt: {
            type: DataTypes.DATE
          },
          updatedAt: {
            type: DataTypes.DATE
          }
        });
    done();
  },
  down: function(migration, DataTypes, done) {
    migration.dropTable('MyTable');
    done();
  }

Baştan itibaren yeniden yapmak için:

./node_modules/.bin/sequelize --migrate --undo
./node_modules/.bin/sequelize --migrate

Sonra tabloları doldurmak için bir tohum dosyasını çalıştırmak için kahve kullanıyorum:

coffee server/seed.coffee

Bu sadece içinde bir şeye benzeyen bir oluşturma işlevi vardır:

user = db.User.create
  username: 'bob'
  password: 'suruncle'
  email: 'bob@bob.com'
.success (user) ->
  console.log 'added user'
  user_id = user.id
  myTable = [
    field1: 'womp'
    field2: 'rat'

    subModel: [
      field1: 'womp'
     ,
      field1: 'rat'
    ]
  ]

sync()Modellerinizde endeksinizi çıkarmayı unutmayın, aksi takdirde göçlerin ve tohumun ne yapacağının üzerine yazılır.

Dokümanlar elbette http://sequelize.readthedocs.org/en/latest/docs/migrations/ adresindedir . Ancak temel cevap, ihtiyacınız olan alanları belirlemek için her şeyi kendinize eklemeniz gerektiğidir. Bunu senin için yapmaz.


5
Taşıma işlemlerini nasıl oluşturacağınızı ve çalıştıracağınızı sormuyordum - belirttiğiniz gibi, hepsi dokümantasyonda mevcut. Sorduğum şey, bunları mevcut örneklerin daha yeni bir veritabanı sürümüne güncellenmesi ve yeni örneklerin sıfırdan yapılan veritabanına ihtiyaç duyduğu yeniden kullanılabilir bir uygulama bağlamında nasıl kullanılacağıdır. Veya belki de vardır Buna cevap ve hiç senkronizasyon () kullanarak ı olmaması gerektiğini söyleyerek, ve ilk veritabanı ve göçlerle kendisine tüm değişiklikleri. Söylediğin bu mu?
tremby

1
@tremby Bence öyle diyor. Senkronizasyonu kullanabilir ve sonuçlarla ilgilenebilir veya taşıma işlemlerini manuel olarak oluşturabilirsiniz. Çerçevelerimiz, Rails-esque tarzında, şema farkına dayalı geçiş dosyaları oluşturur, Sequelize bunu benim için yaparsa SEVECEKTİR. Çok fazla bir ağrı elle göçler yapmak ...
mpowered

Bu durumda sequelize.sync(), ilk geçişiniz olarak (raylara benzer şekilde schema.rb) tüm temel tabloları ve endeksleri oluşturan oluşturulmuş bir komut dosyasına sahip olamayacağınız bir utanç . sql olarak, execilk geçişinizde büyük bir ifadeye koydu . Ardından, bilinen bir "sürüm 1.0" başlangıç ​​noktasına karşı artımlı değişiklikler çalıştırıyorsunuz.
thom_nic

11

İçin geliştirme , şimdi kendi yapısını değiştirerek mevcut tablo senkronize etmek için bir seçenek yoktur. En son sürümü kullanmaSekansize github deposundan şimdi alterparametre ile senkronizasyonu çalıştırabilirsiniz .

Table.sync({alter: true})

Dokümanlardan bir uyarı:

Tabloları modele uyacak şekilde değiştirir. Üretim kullanımı için önerilmez. Modelde kaldırılan veya türlerinin değiştirildiği sütunlardaki verileri siler.


3

Şimdi yeni devamı ile göç çok basit.

Bu, yapabileceğiniz bir örnektir.

    'use strict';

    var Promise = require('bluebird'),
        fs = require('fs');

    module.exports = {
        up: function (queryInterface, Sequelize) {

            return Promise
                .resolve()
                .then(function() {
                    return fs.readFileSync(__dirname + '/../initial-db.sql', 'utf-8');
                })
                .then(function (initialSchema) {
                    return queryInterface.sequelize.query(initialSchema);
                })
        },

        down: function (queryInterface, Sequelize) {
            return Promise
                .resolve()
                .then(function() {
                    return fs.readFileSync(__dirname + '/../drop-initial-db.sql', 'utf-8');
                })
                .then(function (dropSql) {
                    return queryInterface.sequelize.query(dropSql);
                });
        }
    };

Ayarlamanız gerektiğini unutmayın:

"dialectOptions": { "multipleStatements": true }

veritabanı yapılandırmasında.


Bu sadece veritabanını bırakıp yeniden oluşturmuyor mu?
TWilly

Ben bir geliştirme büyük sqlite ve üretim mariadb veya diğer için kullanabilirsiniz, çünkü aksi takdirde veritabanı agnostic olacak bağdaştırıcı ve veritabanı bağlayacağından, bir başlangıç ​​büyük sql dosyası kullanarak bunu yapmak için önerilen bir yol olmadığını düşünüyorum.
diosney

2

Sürümü kullan. Uygulamanın sürümü veritabanının sürümüne bağlıdır. Yeni sürüm bir veritabanının güncellenmesini gerektiriyorsa, veritabanı için taşıma oluşturun.

update: Gerektiğinde geçişi ( KISS ) bırakmaya ve script_db (sync forse: false) komut dosyasını çalıştırmaya karar verdim .


Kullanıcı1916988'in yanıtına benzer şekilde, hiç kullanmamam gerektiğini sync()ve eski sürümün modellerinin şemasından yeni sürümün modellerine geçişleri manuel olarak yazmam gerektiğini mi söylüyorsunuz ?
tremby

Güncellemeniz nedeniyle + 1'ledim. Aslında aynısını yapmayı düşünüyorum. Uygulama yapabildiğinde tüm geçişleri manuel olarak yazmak biraz aptalca, bu yüzden sadece uygulamayı bir kez çalıştıran ve senkronizasyon işlevini çalıştıran manuel bir komut dosyası oluşturacağım.
Sallar

2

Biraz geç ve belgeleri okuduktan sonra, bahsettiğiniz ilk geçişe sahip olmanıza gerek yok. Tek yapmanız gereken aramaksync tabloları oluşturmak .

sequelize.sync()

Basit bir model senkronizasyonunu aşağıdaki gibi bir şey yaparak da çalıştırabilirsiniz:

Project.sync() ama bence sequelize.sync() projeniz için daha yararlı bir genel durum (başlangıçta iyi modelleri içe sürece).

(den alınan http://sequelizejs.com/docs/latest/models#database-synchronization adresinden )

Bu hepsini oluşturacak başlangıç yapılarını . Daha sonra, yalnızca şemalarınızı geliştirmek için taşıma oluşturmanız gerekir.

Umarım yardımcı olur.


7
Orijinal gönderiyi çok iyi okuduğunuzu sanmıyorum, ya da yeterince açık değildim. Ben farkındayım sequelize.sync()ve ne yaptığını bilmiyorum.
tremby

2

Sequelize, rastgele SQL'i eşzamansız olarak çalıştırabilir .

Ne yapacağım:

  • Göç Oluşturma (İlk göç olarak kullanmak için);
  • Veritabanınızı dökün, şöyle bir şey: mysql_dump -uUSER -pPASS DBNAME > FILE.SQL
  • Tam dökümü metin olarak yapıştırın (Tehlikeli) veya Düğümde tam dökümü olan bir Dosya yükleyin:
    • var baseSQL = "LOTS OF SQL and it's EVIL because you gotta put \ backslashes before line breakes and \"quotes\" and/or sum" + " one string for each line, or everything will break";
    • var baseSQL = fs.readFileSync('../seed/baseDump.sql');
  • Bu dökümü Sequelize Migration'da çalıştırın:
module.exports = {
  up: function (migration, DataTypes) {
    var baseSQL = "whatever" // I recommend loading a file
    migration.migrator.sequelize.query(baseSQL);
  }
}

Bu, zaman uyumsuz bir şey bir sorun haline gelse de, veritabanını oluşturmaya dikkat etmelidir. Böyle bir durumda, zaman upuyumsuzluk işlevi tamamlanıncaya kadar ardışıklaştırma işlevini döndürmeyi ertelemenin bir yoluna bakarım query.

Mysql_dump hakkında daha fazla bilgi: http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
Sequelize Migrations hakkında daha fazla bilgi : http://sequelize.readthedocs.org/en/latest/docs/migrations/
Sequelize Migration içinden SQL çalıştırma: https://github.com/sequelize/sequelize/issues/313


1

İşte mevcut iş akışım. Önerilere açığım.

  1. Varolmayan tablolar oluşturmak için devam filmi ayarlama
  2. _Blank adında boş bir veritabanındaki tüm tabloları bırakacak ve yeniden oluşturacak şekilde sıralamayı ayarlayın
  3. _Blank'i karşılaştırmak için mysql aracını kullanın ve bu aracı kullanarak değişiklikleri eşitleyin. Yine de mac'ta bunu yapabilen uygun fiyatlı bir araç arıyorum. MySql çalışma tezgahı, mevcut bir şemadan bir modeli içe aktarabilir ve ardından şemayı senkronize edebileceğiniz gibi görünür. Bunu kolaylaştırmak için komut satırı üzerinden bunu nasıl yapacağınızı anlamaya çalışın.

Bu şekilde, taşıma tablosunu manuel olarak güncellemeniz ve şişman parmaklar hakkında endişelenmeniz gerekmez, ancak yine de bir ORM elde edersiniz.


1

Arkadaşım aynı soruyu sordum ve nasıl kullanacağımı anladım.

ORM sekanslama olmadan başladım, bu yüzden zaten bir veri modelim vardı.
Modelleri otomatik olarak sequelize-auto ile oluşturmak ve https://gist.github.com/ahelord/a7a7d293695b71aadf04157f0f7dee64 oluşturup senkronize etmek ( {Force: false}) ile oluşturduğunuz bu dosya ile geçişlerini oluşturmak zorunda kaldım
Bu dev.I sürümüne olurdu içindedir Her kod çekişimde model ve taşıma işlemleri yapılıyor ve çalıştırılıyor.

Üretimde sunucu sadece üst kattadır, bu yüzden sadece geçişleri çalıştırmanız gerekir ve her bir taahhütte, arka ucu durdurmadan modeli versiyonlayacağınız gibi yönetin


1

Bu yazıyı ve benzer soruları inceledim, gerçekten benim için cevap vermedi. Taşıma işlemleri, yerel veritabanlarını hızlandırmak ve üretimdeki verileri güncellemek için yararlıdır

Soruyu burada sordum ve cevapladım: Sıralı taşıma ve başlatma işlemlerini yürütmek için iş akışı?

Bir yeşil alan projesi için TL-DR versiyonu

  1. Veritabanı şemanızı geleneksel olarak saf SQL komut dosyalarını kullanarak veya bunun yerine bir gui aracı kullanıyorsanız tasarlayın
  2. Db şemanızın tüm% 95'ini ve onunla mutlu olduğunuzu sonuçlandırdığınızda, devam edin ve tüm hareket ettirerek devam ettirin. .sql dosyayı
  3. İlk geçişinizi yapın. sequelize init:migrateİstediğiniz klasörde çalıştırınmodels altındadır
  4. İlk taşıma dosyanızı oluşturun. Çalıştırmaksequelize migration:generate --name [name_of_your_migration]
  5. Bu taşıma dosyasında bu kodu buraya yerleştirin
("use strict");
/**
 * DROP SCHEMA public CASCADE; CREATE SCHEMA public
 * ^ there's a schema file with all the tables in there. it drops all of that, recreates
 */
const fs = require("fs");
const initialSqlScript = fs.readFileSync("./migrations/sql/Production001.sql", {
  encoding: "utf-8",
});
const db = require("../models");
module.exports = {
  up: () => db.sequelize.query(initialSqlScript),
  down: () =>
    db.sequelize.query(`DROP SCHEMA public CASCADE; CREATE SCHEMA public;
`),
};

resim açıklamasını buraya girin

bu genel klasör yapısıyla

resim açıklamasını buraya girin

  1. Şimdi sırala kurulumunuz ilk veritabanı şemanızla senkronize edildi
  2. veritabanı şemanızı düzenlemek istediğinizde, bunu tekrar çalıştırın sequelize migration:generate --name [name_of_your_migration]
  3. Devam edin ve değişiklik yollarını burada upve downtaşıma yollarında yapın. Bunlar, sütun adlarını, DELETE, ADD sütunları vb. Değiştirmek için ALTER ifadelerinizdir.
  4. Çalıştırmak sequelize db:migrate
  5. Modellerin uzak db'nizdeki değişikliklerle senkronize olmasını istiyorsunuz, böylece şimdi ne yapabilirsiniz npm install sequelize-auto.
  6. Bu, veritabanınızdaki geçerli veritabanı şemasını okuyacak ve model dosyalarını otomatik olarak oluşturacaktır. Https://github.com/sequelize/sequelize-autosequelize-auto -o "./models" -d sequelize_auto_test -h localhost -u my_username -p 5432 -x my_password -e postgres altında bulunanlara benzer bir komut kullanın

Modelinizde farkları görmek için git'i kullanabilirsiniz, sadece veritabanı modelindeki değişiklikleri yansıtan değişiklikler olmalıdır. Bir yan not olarak, bunları modelskullanırsanız doğrudan kullanmayın sequelize auto, çünkü bu sizin için üretecektir. Benzer şekilde, artık veritabanı şemanızı doğrudan SQL dosyalarıyla değiştirmemelisiniz, bu .sqldosyaları da içe aktarabileceğiniz için bu bir seçenek olarak kabul edilir

Artık veritabanı şemanız güncel ve resmen yalnızca veritabanı taşıma işlemlerini sıralamak için geçiş yaptınız.

Her şey sürüm kontrollüdür. Bu, veritabanı ve arka uç geliştiricisi için ideal iş akışıdır


0

Daha da basit bir yol var (Sıralamayı önleme). Hangi böyle gider:

  1. Projenize bir komut yazıyorsunuz : npm run migrate: new

  2. Bu 3 dosya oluşturur. Bir js dosyası ve yukarı ve aşağı adlandırılmış iki sql dosyası

  3. SQL ifadenizi saf sql olan bu dosyalara koydunuz
  4. Sonra şunu yazın: npm run migrate: up veya npm run migrate: down

Bunun çalışması için lütfen db-migrate modülüne bir göz atın .

Kurduktan sonra (ki bu zor değildir), DB'nizi değiştirmek gerçekten kolaydır ve çok zaman kazandırır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.