기존 Sequelize 시드 파일 추적
전제 조건: Sequelize에 대해 이미 알고 있고 시더를 설정해야 합니다. 그렇지 않은 경우 에서 내 튜토리얼을 진행하십시오.
문제
Sequelize에 의해 추적된 시드 파일 없이 코드에 시드 파일(20200115143840-add-requesttypes.js)이 있는 Sequelize 프로젝트를 유지 관리하기 시작했습니다. 더 많은 시드 데이터(파일)를 추가해야 했습니다. 그러나 그렇게 했을 때 Sequelize는 전체 시드 파일을 다시 실행하여 이미 존재하는 시드 데이터를 복제하고 새 데이터를 추가합니다.
이것은 우리에게 큰 문제였으며 프로덕션에서 이 문제를 수정해야 했습니다.
시더즈 파일을 추적하기 위해 시퀄라이즈를 허용하는 구성 파일이 추가되지 않았음을 깨달았습니다.
module.exports = {
.......
seederStorage: 'sequelize'
}
이 시간에 이 구성을 추가하면 Sequelize가 여전히 이전 시드 파일(들)을 다시 실행하고(이것이 바로 우리가 방지하고자 했던 것입니다) 새 파일을 실행한다는 의미입니다.
솔루션
이 문제를 해결할 수 있는 두 가지 방법이 있습니다.
데이터베이스에서 직접
이 문제를 해결하고 Sequelize를 계속 사용하는 가장 간단한 방법은 프로덕션 데이터베이스(앱이 연결된 다른 환경)로 이동하는 것입니다.
열 이름과 유형 문자열을 사용하여 SequelizeData 테이블 만들기
CREATE TABLE SequelizeData (
name varchar(255) not null,
);
기존 시드 파일의 이름을 추가합니다. 우리의 경우 기존 시드 파일이 하나만 있었습니다.
INSERT INTO SequelizeData
(name)
VALUES ('20200115143840-add-requesttypes.js');
이제 Sequelize 구성 파일로 이동하여 seederStorage를 추가하십시오.
module.exports = {
.......
seederStorage: 'sequelize'
}
이제 문제 없이 새 시드 파일을 추가할 수 있습니다. QA, DEV 및 기타 모든 환경 데이터베이스에 대해 동일한 작업을 수행해야 합니다.
연속화
문제를 해결하려면 Sequelize가 기존 시드 파일을 추적하고 추가될 새 시드 파일을 추적할 수 있어야 했습니다.
먼저 SequelizeData 테이블을 생성해야 합니다.
그래서 우리는 테이블을 생성하기 위해 마이그레이션 파일을 추가합니다.
export default {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('sequelizeData', {
name: {
type: Sequelize.STRING,
allowNull: false,
},
});
},
down: queryInterface => queryInterface.dropTable('sequelizeData')
};
그런 다음 기존 시드 파일의 이름을 테이블에 채웁니다(시작 시 시드 스크립트가 실행될 때 Sequelize가 파일을 실행하는 것을 방지하기 위해).
다음으로, 시드 데이터가 통화 테이블에 존재하는지 확인하고 존재하지 않는 경우 추가합니다(이는 프로젝트를 설정하는 새로운 사람이 역할 시드 파일을 그대로 실행할 수 있도록 허용하기 위해 수행됩니다. DB에 존재하지 않음)
export default {
up: async (queryInterface) => {
const currencyExist = await queryInterface.rawSelect(‘Currency, {
where: {
name: ‘USD,
},
},
, ['id']);
if(!currencyExist) {
await queryInterface.bulkInsert('sequelizeData', [
{
name: '20200115143840-users.js',
},
], {})}
},
down: async (queryInterface) => {
await queryInterface.bulkDelete('sequelizeData', null, {});
}
};
다음은 Sequelize 구성 파일에서 seederStorage를 설정하는 것입니다.
module.exports = {
.....
seederStorage: 'sequelize'
}
이제 코드를 살펴보겠습니다.
가장 먼저 할 일은 requestType 데이터가 RequestTypes 테이블에 있는지 확인하는 것입니다. 그것이 있다면 우리는 이 시드를 실행하고 싶지 않습니다. 그렇지 않으면 실행할 것입니다.
존재하지 않는 경우(현재의 경우) 기존 시드 파일의 이름을 후속 파일에 추가합니다.
이것은 프로젝트를 처음부터 설정하는 모든 사람이 시드 파일을 문제 없이 실행할 수 있도록 하는 데 필요합니다(중요).
이제 Sequelize는 기존 시드 파일을 추적하고 있으므로 계속해서 새 시드 파일을 추가하면 모든 것이 잘 될 것입니다.
또한 프로젝트에 온보딩하는 사람은 누구나 문제 없이 로컬에서 프로젝트를 설정할 수 있습니다.
이제 우리가 작업하고 있던 프로젝트에서 우리가 한 일은 코드로 수정하는 것입니다. 많은 환경(프로덕션, QA, 스테이징, 개발 등)이 있습니다. DB에서 수정하려면 모든 데이터베이스를 통해 수정해야 합니다.
이를 수정하기 위해 코드를 작성하는 것은 우리에게 의미가 있습니다.
참고 *** 이 구현은 작은 실수로 인해 치명적인 오류와 문제가 발생할 수 있으므로 철저히 테스트해야 합니다.
마지막으로 데이터베이스와 원시 SQL 구문 및 사용 사례를 잘 이해하면 복잡한 데이터베이스 문제를 해결하는 데 항상 도움이 됩니다(사용 중인 도구에 관계없이).
고맙습니다.
Idris Kelani
Reference
이 문제에 관하여(기존 Sequelize 시드 파일 추적), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/idmega2000/track-existing-sequelize-seed-files-ih7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)