Sequelize.js : 마이그레이션 및 동기화 사용 방법


137

프로젝트를 시작할 준비가되었습니다. 시작 후 큰 계획이 있으며 데이터베이스 구조가 변경됩니다. 기존 테이블의 새 열뿐만 아니라 새 테이블, 기존 및 새 모델에 대한 새로운 연결입니다.

Sequelize의 마이그레이션은 아직 다루지 않았습니다. 데이터베이스가 변경 될 때마다 데이터를 지우지 않아도되는 테스트 데이터 만 있었기 때문입니다.

이를 위해 현재 sync force: true모델 정의를 변경 한 경우 앱을 시작할 때 실행 중 입니다. 이렇게하면 모든 테이블이 삭제되고 처음부터 다시 만들어집니다. force새 테이블 만 만들 도록 옵션을 생략 할 수 있습니다. 그러나 기존 항목이 변경된 경우 유용하지 않습니다.

마이그레이션을 추가하면 어떻게 작동합니까? 분명히 기존 테이블 (데이터가있는)을 지우고 싶지 않기 때문에 문제가 아닙니다 sync force: true. 다른 앱에서 앱 배포 절차의 일부로 개발 (라 라벨 및 기타 프레임 워크)을 도왔습니다. 보류중인 마이그레이션을 실행하기 위해 migrate 명령을 실행합니다. 그러나 이러한 응용 프로그램에서 첫 번째 마이그레이션에는 기본 데이터베이스가 있으며, 데이터베이스는 개발 초기 시간 인 첫 번째 알파 릴리스 등의 상태에 있습니다. 따라서 파티 후반에 앱의 인스턴스조차도 모든 마이그레이션을 순서대로 실행하여 한 번에 속도를 높일 수 있습니다.

Sequelize에서 이러한 "첫 번째 마이그레이션"을 어떻게 생성합니까? 내가없는 경우 응용 프로그램의 새로운 인스턴스가 줄을 따라 마이그레이션을 실행할 골격 데이터베이스가 없거나 시작시 동기화를 실행하여 데이터베이스를 모두 새로운 상태로 만듭니다. 새 테이블 등이지만 마이그레이션을 실행하려고하면 원래 데이터베이스로 작성되고 각 연속 반복을 염두에두기 때문에 의미가 없습니다.

내 생각 과정 : 모든 단계에서 초기 데이터베이스와 각 마이그레이션 순서대로 데이터베이스가 생성 될 때 생성 된 데이터베이스와 동일해야합니다 (플러스 또는 마이너스 데이터) sync force: true실행됩니다. 코드의 모델 설명이 데이터베이스 구조를 설명하기 때문입니다. 따라서 마이그레이션 테이블이없는 경우 동기화를 실행하고 실행되지 않은 모든 마이그레이션을 완료로 표시합니다. 이것이 내가해야 할 일입니까 (어떻게?), Sequelize가 이것을 스스로해야합니까, 아니면 잘못된 나무를 짖고 있습니까? 그리고 내가 올바른 지역에 있다면, 구 모델 (커밋 해시로?) 또는 각 마이그레이션이 커밋에 묶여있을 수 있기 때문에 대부분의 마이그레이션을 자동으로 생성하는 좋은 방법이 있어야합니다. 이식 불가능한 자식 중심 우주에서) 및 새로운 모델. 그것은 구조를 구별하고 데이터베이스를 구식에서 신식으로 변환하는 데 필요한 명령을 생성 할 수 있으며 개발자는 들어가서 필요한 조정을 할 수 있습니다 (특정 데이터 삭제 / 전환 등).

--init명령으로 sequelize binary를 실행하면 빈 마이그레이션 디렉토리가 표시됩니다. 그런 다음 실행 sequelize --migrate하면 SequelizeMeta 테이블이 없어 다른 테이블이 없습니다. 바이너리는 내 앱을 부트 스트랩하고 모델을로드하는 방법을 모르기 때문에 분명히 아닙니다.

뭔가 빠졌을 것입니다.

TLDR : 레거시 시작 데이터베이스가없는 새로운 앱뿐만 아니라 다양한 라이브 앱 인스턴스를 최신 상태로 유지할 수 있도록 앱과 마이그레이션을 어떻게 설정합니까?


2
워크 플로와 관련된 답변을 받았지만 마이그레이션을 사용하여 모든 테이블을 설정하는 것이 이상적입니다. sync지금 사용 하고 있더라도 마이그레이션은 전체 데이터베이스를 "생성"하므로 스켈레톤에 의존하는 것은 그 자체로 문제가됩니다. 예를 들어, Ruby on Rails 워크 플로우는 모든 것에 마이그레이션을 사용하며 익숙해지면 정말 훌륭합니다. 편집 : 네, 나는이 질문이 꽤 오래 된 것을 보았지만 만족스러운 답변이 없었으며 사람들이 여기에지도를 구할 수있는 것을 보았을 때, 내가 기여해야한다고 생각했습니다.
Fernando Cordeiro

답변:


88

"첫 번째 마이그레이션"생성

귀하의 경우 가장 신뢰할 수있는 방법은 거의 수동으로 수행하는 것입니다. sequelize-cli 도구 를 사용하는 것이 좋습니다 . 구문은 다소 평범합니다.

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

모델과 마이그레이션이 모두 생성됩니다. 그런 다음 sequelize-cli로 생성 된 기존 모델을 수동으로 병합하고 마이그레이션과 동일하게 수행하십시오. 이 작업을 수행 한 후 데이터베이스를 지우고 (가능한 경우) 실행하십시오.

sequelize db:migrate

그러면 스키마가 마이그레이션됩니다. 적절한 스키마 개발 프로세스 (sync : force없이 권한있는 마이그레이션)로 전환하려면이 작업을 한 번만 수행해야합니다.

나중에 스키마를 변경해야 할 때 :

  1. 마이그레이션을 작성하십시오. sequelize migration:create
  2. 마이그레이션 파일에서 쓰기 및 아래로 기능
  3. 마이그레이션 파일의 변경 사항에 따라 모델을 수동으로 변경하십시오.
  4. 운영 sequelize db:migrate

프로덕션에서 마이그레이션 실행

분명히 프로덕션 서버로 ssh하고 수동으로 마이그레이션을 실행할 수는 없습니다. umzug 사용 , Node.js를위한 프레임 워크 불가지론 마이그레이션 도구는 응용 프로그램이 시작되기 전에 대기중인 마이그레이션을 수행 할 수 있습니다.

다음과 같이 보류 중 / 아직 실행되지 않은 마이그레이션 목록을 얻을 수 있습니다.

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

그런 다음 콜백 내에서 마이그레이션을 실행하십시오 . execute 메소드는 지정된 모든 마이그레이션마다 해당 기능을 실행하는 범용 기능입니다.

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

그리고 내 제안은 앱이 시작되고 매번 경로를 제공하기 전에 수행하는 것입니다. 이 같은:

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

나는 이것을 지금 시도 할 수는 없지만 처음에는 작동해야합니다.

UPD 2016 년 4 월

일년 후에도 여전히 유용하므로 현재 팁을 공유하십시오. 지금 sequelize-cli은 필요한 실시간 종속성에 따라 패키지를 설치 하고 다음 package.json과 같이 NPM 시작 스크립트를 수정 합니다.

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

프로덕션 서버에서 수행해야 할 유일한 작업은 npm start입니다. 이 명령은 모든 마이그레이션을 실행하고 모든 시드를 적용하며 앱 서버를 시작합니다. umzug를 수동으로 호출 할 필요가 없습니다.


3
이것은 내가 찾고있는 것 같습니다. 그것은 "필수적"이어야 할만큼 마술적이고 자동적으로 보이지는 않지만, 이것은 아마도 기대할 수있는 최선일 것입니다. 그러나 현재 Sequelize와 함께 작동하지 않으며 곧 테스트 할 수 없습니다. 그러나 다른 사람 이이 솔루션이 좋다는 데 동의하면이 답변을 수락 할 것입니다. 나는 모델 버전 사이의 차이점에서 자동으로 이러한 마이그레이션을 수행 할 수있는 방법이없는 것으로 보인다는 것이 여전히 슬픈 일입니다.
tremby

4
@tremby 모델 을 실제로 이해 하는 유일한 프레임 워크 는 Django였습니다. 모델을 분석하고 "사용자 모델에서 필드 이름을 first_name (으)로 이름이 바뀐 것 같습니다. 마이그레이션을 작성 하시겠습니까?" 장고에서 거의 마술처럼 작동, 내가 사용했던 다른 도구는 같은 마이그레이션 내가 위에서 언급 한 접근 가정 : 당신이 깊이 현재 모델 상태에 실제로 추가하는 어떤 종류의 어떤 분야 이해, 마이그레이션을 직접 작성에 대한 책임이 있습니다
f1nn

2
당신은 제거 할 수 pending다음 execute그냥 할 umzug.up().then(function (migrations) { app.listen(3000); }). umzug 문서에 따르면 보류중인 모든 마이그레이션이 실행됩니다.
Vinay

마이그레이션을 완료 할 때 원래 모델 파일의 스키마에 필드를 추가하는 것이 일반적입니까?
theptrk

@ f1nn 설정에 대한 질문이 있습니다. 앱 클러스터링 및 가용성을 어떻게 처리합니까? 워크 플로에 pm2를 통합하고 npm 스크립트와 직접 작동하지 않을 수 있습니다.
diosney

17

이것을 직접 배우는 것이지만 지금은 마이그레이션을 사용하는 것이 좋습니다. 마이그레이션에서 어떤 일이 발생하는지 알아내는 가장 좋은 방법은 테이블에서 SQL을보고 sequelize.sync()마이그레이션을 빌드하는 것입니다.

migrations -c [migration name] 

마이그레이션 디렉토리에 템플릿 마이그레이션 파일을 만듭니다. 그런 다음 필요한 필드로 채울 수 있습니다. 이 파일에는 createdAt/ updatedAt, 연관에 필요한 필드 등 이 포함되어야합니다 .

초기 테이블 생성을 위해서는 다음이 있어야합니다.

migration.dropTable('MyTable');

그러나 테이블 구조에 대한 후속 업데이트는 이것을 생략하고 alter table을 사용할 수 있습니다.

./node_modules/.bin/sequelize --migrate

create 예제는 다음과 같습니다.

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

시작부터 다시 실행하려면 :

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

커피를 사용하여 시드 파일을 실행하여 테이블을 채 웁니다.

coffee server/seed.coffee

여기에는 다음과 같은 create 함수가 있습니다.

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()당신의 모델 인덱스의 아웃 또는는 마이그레이션 및 종자가 무엇을 덮어 쓰게됩니다.

문서가 있습니다 http://sequelize.readthedocs.org/en/latest/docs/migrations/ 에 있습니다. 그러나 기본적인 대답은 필요한 필드를 지정하기 위해 모든 것을 직접 추가해야한다는 것입니다. 그것은 당신을 위해하지 않습니다.


5
나는 마이그레이션을 생성하고 실행하는 방법을 묻지 않았다-당신이 지적했듯이, 그것은 모두 문서에서 사용할 수 있습니다. 내가 묻는 것은 기존 인스턴스를 최신 데이터베이스 버전으로 업데이트해야하고 새 인스턴스가 처음부터 데이터베이스를 만들어야하는 재사용 가능한 응용 프로그램의 컨텍스트에서 사용하는 방법입니다. 또는 아마도 당신 그것에 대답하고, sync ()를 전혀 사용해서는 안되며 마이그레이션시 초기 데이터베이스와 모든 변경을해서는 안된다고 말합니다. 그게 니가 말하는거야?
tremby

1
@tremby 나는 이것이 그가 말하는 것이라고 생각합니다. 동기화를 사용하여 결과를 처리하거나 마이그레이션을 모두 수동으로 생성 할 수 있습니다. Rails와 같은 방식으로 우리의 프레임 워크는 스키마 차이를 기반으로 마이그레이션 파일을 생성합니다. Sequelize가 나를 위해 그렇게한다면 사랑합니다. 마이그레이션을 수동으로하기에는 너무 많은 고통이 있습니다 ...
mpowered

그런 sequelize.sync()다음 모든 기본 테이블과 인덱스를 첫 번째 마이그레이션으로 생성하는 스크립트를 생성 할 수 없다는 것은 부끄러운 일입니다 (레일과 유사 schema.rb).이 내용을 읽은 후에는 초기 스키마를 내보내는 것이 가장 좋습니다. SQL로 시작한 다음 exec첫 번째 마이그레이션에서 큰 문장으로 작성하십시오. 그런 다음 알려진 "버전 1.0"시작점에 대해 증분 변경을 실행합니다.
thom_nic

11

들어 개발 , 이제 그 구조를 변경하여 현재 테이블을 동기화하는 옵션이 있습니다. sequelize github repo 의 최신 버전을 사용하여 이제 alter매개 변수 와 동기화를 실행할 수 있습니다 .

Table.sync({alter: true})

문서에서주의 사항 :

모델에 맞게 테이블을 변경합니다. 프로덕션 용도로는 권장되지 않습니다. 모델에서 제거되었거나 유형이 변경된 열의 데이터를 삭제합니다.


3

이제 새로운 후행 마이그레이션으로 매우 간단합니다.

이것은 당신이 할 수있는 일의 예입니다.

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

다음을 설정해야합니다.

"dialectOptions": { "multipleStatements": true }

데이터베이스 구성에서.


데이터베이스를 삭제하고 다시 만들지 않습니까?
TWilly

필자는 sqlite 개발 및 프로덕션 mariadb 또는 기타 용도로 사용할 수 있기 때문에 데이터베이스와 무관하게 어댑터와 데이터베이스를 묶기 때문에 초기 큰 SQL 파일을 사용하는 것이 권장되는 방법은 아니라고 생각합니다.
diosney

2

버전을 사용하십시오. 응용 프로그램 버전은 데이터베이스 버전에 따라 다릅니다. 새 버전에 데이터베이스 업데이트가 필요한 경우 데이터베이스를 마이그레이션하십시오.

업데이트 : 마이그레이션을 포기하기로 결정하고 ( KISS ) 필요할 때 update_db 스크립트 (sync forse : false)를 실행 하기로 결정했습니다 .


user1916988의 답변에 대한 나의 대답과 비슷하게, 전혀 사용해서는 안되며 sync()이전 버전의 모델 스키마에서 새로운 버전의 모델로 마이그레이션을 수동으로 작성해야한다고 말하고 있습니까?
tremby

업데이트로 인해 +1했습니다. 실제로 같은 일을 생각하고 있습니다. 앱이 할 수있을 때 모든 마이그레이션을 수동으로 작성하는 것은 약간 어리석은 일이므로 앱을 한 번 실행하고 동기화 기능을 실행하는 수동 스크립트 만 만들면됩니다.
Sallar

2

조금 늦었고 설명서를 읽은 후에는 처음 마이그레이션 할 필요가 없습니다. sync테이블을 만들려면 전화 하면됩니다.

sequelize.sync()

다음과 같은 작업을 수행하여 간단한 모델 동기화를 실행할 수도 있습니다.

Project.sync()하지만 sequelize.sync()좋은 시작 모델을 가져 오는 한 프로젝트에 더 유용한 경우 라고 생각합니다 .

( http://sequelizejs.com/docs/latest/models#database-synchronization 에서 가져옴 )

이것은 모든 초기 구조 를 만듭니다 . 이후에는 스키마를 발전시키기 위해 마이그레이션 만 작성하면됩니다.

도움이되기를 바랍니다.


7
나는 당신이 원래의 게시물을 매우 철저하게 읽지 않았다고 생각하지 않을 것입니다. 나는 그 이상의 것을 알고 sequelize.sync()있습니다.
tremby

2

Sequelize는 임의의 SQL을 비동기 적으로 실행할 수 있습니다 .

내가 할 일은 :

  • 마이그레이션 생성 (첫 번째 마이그레이션으로 사용)
  • 다음과 같은 데이터베이스를 덤프하십시오. mysql_dump -uUSER -pPASS DBNAME > FILE.SQL
  • 전체 덤프를 텍스트로 붙여 넣거나 (위험한) 노드에 전체 덤프가있는 파일을로드하십시오.
    • 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');
  • Sequelize Migration에서이 덤프를 실행하십시오.
module.exports = {
  up: function (migration, DataTypes) {
    var baseSQL = "whatever" // I recommend loading a file
    migration.migrator.sequelize.query(baseSQL);
  }
}

비동기는 문제가 될 수 있지만 데이터베이스를 설정해야합니다. 그런 일이 발생 up하면 비동기 query함수가 완료 될 때까지 sequelize 함수 반환을 연기하는 방법을 살펴 보겠습니다 .

더 mysql_dump에 대해 : http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
더 Sequelize 마이그레이션에 대한 : http://sequelize.readthedocs.org/en/latest/docs/migrations/
상세 정보 Sequelize Migration 내에서 SQL 실행 : https://github.com/sequelize/sequelize/issues/313


1

여기 내 현재 워크 플로우가 있습니다. 나는 제안에 개방적이다.

  1. 존재하지 않는 테이블을 만들려면 순서를 설정하십시오.
  2. _blank라는 빈 데이터베이스에서 모든 테이블을 삭제하고 다시 만들려면 sequelize를 설정하십시오.
  3. mysql 도구를 사용하여 _blank를 비교하고 해당 도구를 사용하여 변경 사항을 동기화하십시오. 여전히 Mac에서이를 수행 할 수있는 저렴한 도구를 찾고 있습니다. MySql 워크 벤치는 기존 스키마에서 모델을 가져온 다음 스키마를 동기화 할 수있는 것처럼 보입니다. 명령 줄을 통해이를 쉽게 수행 할 수있는 방법을 찾아 내려고합니다.

이렇게하면 마이그레이션 테이블을 수동으로 업데이트 할 필요가없고 뚱뚱한 손가락에 대해 걱정할 필요는 없지만 여전히 ORM을받습니다.


1

친구 같은 질문이 있었고 사용법을 이해했습니다.

나는 ORM sequelize없이 시작했기 때문에 이미 데이터 모델을 가지고있었습니다.
sequelize-auto를 사용하여 모델을 자동으로 생성하고 https://gist.github.com/ahelord/a7a7d293695b71aadf04157f0f7dee64 를 만들고 동기화 ( {Force: false}) 하는이 파일을 사용하여 마이그레이션을 생성
해야했습니다. 코드를 가져올 때마다 모델과 마이그레이션을 실행합니다.

프로덕션에서는 서버가 위층에 있으므로 백엔드를 중지하지 않고 모델의 버전을 지정할 때 마이그레이션 및 각 커밋 관리 만 실행하면됩니다.


1

나는이 게시물과 비슷한 질문을 겪었지만 실제로 대답하지는 않았습니다. 마이그레이션은 로컬 데이터베이스를 가동하고 프로덕션 데이터를 업데이트하는 데 유용합니다

나는 여기에 질문을하고 대답했습니다 : 시퀀싱 마이그레이션 및 초기화 처리 워크 플로우?

그린 필드 프로젝트를위한 TL-DR 버전

  1. 순수한 SQL 스크립트를 사용하거나 GUI 도구를 대신 사용하는 경우와 같이 데이터베이스 스키마를 설계하십시오.
  2. 모든 95 %의 db 스키마를 완성하고 만족할 때 전체 .sql파일 을 이동하여 시퀀스로 이동하십시오.
  3. 첫 마이그레이션을하십시오. 실행 sequelize init:migrate당신이 어떤 폴더 models에 있습니다
  4. 첫 번째 마이그레이션 파일을 작성하십시오. 운영sequelize migration:generate --name [name_of_your_migration]
  5. 해당 마이그레이션 파일에서이 코드를 거기에 넣으십시오.
("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;
`),
};

여기에 이미지 설명을 입력하십시오

이 일반적인 폴더 구조로

여기에 이미지 설명을 입력하십시오

  1. 이제 sequelize 설정이 초기 데이터베이스 스키마와 동기화되었습니다.
  2. 데이터베이스 스키마를 편집하려면 다시 실행하십시오. sequelize migration:generate --name [name_of_your_migration]
  3. 어서와 여기에 당신의 수정을 up하고 down이동 경로. 열 이름, DELETE, ADD 열 등을 변경하는 ALTER 문입니다.
  4. 운영 sequelize db:migrate
  5. 모델이 원격 DB의 변경 사항에 동기화되기를 원하므로 지금 할 수있는 작업은입니다 npm install sequelize-auto.
  6. 데이터베이스의 현재 데이터베이스 스키마를 읽고 모델 파일을 자동 생성합니다. 이 같은 명령 사용 sequelize-auto -o "./models" -d sequelize_auto_test -h localhost -u my_username -p 5432 -x my_password -e postgres에서 찾을를 https://github.com/sequelize/sequelize-auto

git을 사용하여 모델의 difflog를 볼 수 있습니다. 데이터베이스 모델의 변경 사항을 반영하는 변경 사항 만 있어야합니다. 참고로을 models사용하는 경우 직접 수정하지 마십시오 sequelize auto. 마찬가지로 더 이상 SQL 파일을 사용하여 데이터베이스 스키마를 직접 수정하지 않아도됩니다. 이러한 .sql파일도 가져올 수 있으므로 옵션입니다.

이제 데이터베이스 스키마가 최신 상태이며 공식적으로 데이터베이스 마이그레이션 만 시퀀싱했습니다.

모든 것이 버전 제어됩니다. 데이터베이스 및 백엔드 개발자에게 이상적인 워크 플로우입니다.


0

더 간단한 방법이 있습니다 (Sequalize를 피함). 다음과 같이 진행됩니다.

  1. 프로젝트 내에 명령을 입력하십시오. npm run migrate : new

  2. 3 개의 파일이 생성됩니다. js 파일과 위아래로 명명 된 두 개의 SQL 파일

  3. 해당 파일에 SQL 문을 넣습니다. 순수한 SQL입니다.
  4. 그런 다음 npm run migrate : up 또는 npm run migrate : down을 입력하십시오.

이것이 작동하려면 db-migrate 모듈을 살펴보십시오 .

설정이 완료되면 (쉽지 않음) DB를 변경하는 것이 정말 쉽고 시간을 많이 절약 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.