프로젝트를 시작할 준비가되었습니다. 시작 후 큰 계획이 있으며 데이터베이스 구조가 변경됩니다. 기존 테이블의 새 열뿐만 아니라 새 테이블, 기존 및 새 모델에 대한 새로운 연결입니다.
Sequelize의 마이그레이션은 아직 다루지 않았습니다. 데이터베이스가 변경 될 때마다 데이터를 지우지 않아도되는 테스트 데이터 만 있었기 때문입니다.
이를 위해 현재 sync force: true
모델 정의를 변경 한 경우 앱을 시작할 때 실행 중 입니다. 이렇게하면 모든 테이블이 삭제되고 처음부터 다시 만들어집니다. force
새 테이블 만 만들 도록 옵션을 생략 할 수 있습니다. 그러나 기존 항목이 변경된 경우 유용하지 않습니다.
마이그레이션을 추가하면 어떻게 작동합니까? 분명히 기존 테이블 (데이터가있는)을 지우고 싶지 않기 때문에 문제가 아닙니다 sync force: true
. 다른 앱에서 앱 배포 절차의 일부로 개발 (라 라벨 및 기타 프레임 워크)을 도왔습니다. 보류중인 마이그레이션을 실행하기 위해 migrate 명령을 실행합니다. 그러나 이러한 응용 프로그램에서 첫 번째 마이그레이션에는 기본 데이터베이스가 있으며, 데이터베이스는 개발 초기 시간 인 첫 번째 알파 릴리스 등의 상태에 있습니다. 따라서 파티 후반에 앱의 인스턴스조차도 모든 마이그레이션을 순서대로 실행하여 한 번에 속도를 높일 수 있습니다.
Sequelize에서 이러한 "첫 번째 마이그레이션"을 어떻게 생성합니까? 내가없는 경우 응용 프로그램의 새로운 인스턴스가 줄을 따라 마이그레이션을 실행할 골격 데이터베이스가 없거나 시작시 동기화를 실행하여 데이터베이스를 모두 새로운 상태로 만듭니다. 새 테이블 등이지만 마이그레이션을 실행하려고하면 원래 데이터베이스로 작성되고 각 연속 반복을 염두에두기 때문에 의미가 없습니다.
내 생각 과정 : 모든 단계에서 초기 데이터베이스와 각 마이그레이션 순서대로 데이터베이스가 생성 될 때 생성 된 데이터베이스와 동일해야합니다 (플러스 또는 마이너스 데이터) sync force: true
실행됩니다. 코드의 모델 설명이 데이터베이스 구조를 설명하기 때문입니다. 따라서 마이그레이션 테이블이없는 경우 동기화를 실행하고 실행되지 않은 모든 마이그레이션을 완료로 표시합니다. 이것이 내가해야 할 일입니까 (어떻게?), Sequelize가 이것을 스스로해야합니까, 아니면 잘못된 나무를 짖고 있습니까? 그리고 내가 올바른 지역에 있다면, 구 모델 (커밋 해시로?) 또는 각 마이그레이션이 커밋에 묶여있을 수 있기 때문에 대부분의 마이그레이션을 자동으로 생성하는 좋은 방법이 있어야합니다. 이식 불가능한 자식 중심 우주에서) 및 새로운 모델. 그것은 구조를 구별하고 데이터베이스를 구식에서 신식으로 변환하는 데 필요한 명령을 생성 할 수 있으며 개발자는 들어가서 필요한 조정을 할 수 있습니다 (특정 데이터 삭제 / 전환 등).
--init
명령으로 sequelize binary를 실행하면 빈 마이그레이션 디렉토리가 표시됩니다. 그런 다음 실행 sequelize --migrate
하면 SequelizeMeta 테이블이 없어 다른 테이블이 없습니다. 바이너리는 내 앱을 부트 스트랩하고 모델을로드하는 방법을 모르기 때문에 분명히 아닙니다.
뭔가 빠졌을 것입니다.
TLDR : 레거시 시작 데이터베이스가없는 새로운 앱뿐만 아니라 다양한 라이브 앱 인스턴스를 최신 상태로 유지할 수 있도록 앱과 마이그레이션을 어떻게 설정합니까?
sync
지금 사용 하고 있더라도 마이그레이션은 전체 데이터베이스를 "생성"하므로 스켈레톤에 의존하는 것은 그 자체로 문제가됩니다. 예를 들어, Ruby on Rails 워크 플로우는 모든 것에 마이그레이션을 사용하며 익숙해지면 정말 훌륭합니다. 편집 : 네, 나는이 질문이 꽤 오래 된 것을 보았지만 만족스러운 답변이 없었으며 사람들이 여기에지도를 구할 수있는 것을 보았을 때, 내가 기여해야한다고 생각했습니다.