새 컨텐츠를 잃지 않고 사이트의 개발 사본에서 실제 사이트로 변경 사항을 병합하려면 어떻게해야합니까?


40

사이트의 개발 사본에서 수행 한 작업을 실제 프로덕션 사본에 병합하는 가장 좋은 절차는 무엇입니까? 개발이 최신 기능으로 시작된 이후 종종 사이트에 새로운 콘텐츠가 많이 추가되었습니다. 그리고 대부분의 사이트 추가에는 데이터베이스 변경이 포함됩니다. 새 파일을 복사하는 것은 쉽지만 데이터베이스는 어떻습니까? 마지막으로 프로덕션 사이트를 업데이트 한 이후에 추가 된 새 컨텐츠를 잃지 않고 변경 사항을 기존 프로덕션 데이터베이스와 병합하는 방법은 무엇입니까? 이를 도와주는 모듈이 있습니까?


2
혼동 제거 : 병합 및 마이그레이션은 서로 다른 두 단어입니다. 귀하의 질문에 두 가지를 모두 사용했습니다. 라이브 사이트가 비어 있으면 개발 사본을 라이브 사이트 / 호스트로 마이그레이션해야합니다. 라이브 사이트에 이미 컨텐츠가있는 경우 개발 사본에서 라이브 사이트로 새 컨텐츠를 병합해야합니다 (병합은 다소 어렵습니다). 뭘하길 원해?
user931

답변:


16

개발자 사이트의 컨텐츠 유형,보기 및 구조 변경은 기능 을 사용하여 데이터베이스를 코드로 내보내는 방법을 살펴 봅니다 .

컨텐츠 마이그레이션에는 여러 가지 옵션이 있지만 단일 솔루션은 아닙니다. 한 예는 Deployment suite 입니다.


Demployment 제품군은 여전히 ​​Dev에 있지만 (아직 베타 버전은 아님) 흥미로워 보입니다. 직접 사용해 보셨습니까? 다루지 않는 것을 알고 있습니까?
Chaulky

2

나는 기본적으로 두 개의 사고 학교를 채택했습니다 (데이터베이스 diffs를 수행하는 세 번째 사고 학교, 복잡성이 매우 높기 때문에 논의하지 않습니다).

1) 프로덕션 데이터베이스를 삭제하고 개발 데이터베이스의 mysqldump를 가져 와서 배포하십시오. 선택적으로 SQL 덤프의 dev URL을 참조하는 하드 코딩 된 절대 링크에서 미리 정규식 찾기 / 바꾸기를 실행하십시오. dev db를 prod로 가져온 후에는 자동으로 SQL 문 (대개 스크립트를 통해)을 실행하여 prod와 다른 설정을 변경합니다 (예 : 변수 테이블에 필요한 외부 시스템에 연결하기위한 일부 연결 설정이있을 수 있음) dev 버전이 아닌 prod 외부 시스템을 가리 키도록 변경하십시오).

2) 관리자 설정에는 budda에서 언급 한대로 Features 모듈을 사용 하고 Delete All 모듈 과 함께 컨텐츠 내보내기 / 가져 오기 에는 Node Export 모듈을 사용하십시오 . 워크 플로는 다음과 같습니다.

  1. node_export 및 기능을 사용하여 노드 / 기능을 파일로 내보내기
  2. 선택적으로 (그리고 희망적으로) 버전 관리
  3. prod 시스템에서 파일로드
  4. drush 또는 관리 인터페이스를 사용하여 기능로드
  5. drush delete-all 또는 관리 인터페이스를 사용하여 가져 오려는 유형의 모든 노드를 삭제하십시오.
  6. drush ne-import 또는 관리 인터페이스를 사용하여 내 보낸 노드 파일에서 노드를 가져 오십시오.

한 가지 참고 사항은 콘텐츠가 한 방향으로 만 진행되는 표준 워크 플로를 채택하는 것이 좋습니다. Dev-> Prod 또는 Prod-> Dev 중 하나입니다.

나는 이것을 해왔고 꽤 좋은 결과를 가진 일부 큰 시스템에서 이것을하고 있지만, 항상이 사과를 얇게 자르는 방법은 여러 가지가있을 것입니다.


옵션 1에서 개발자 사이트에없는 라이브 사이트에 추가 된 컨텐츠를 어떻게 다시 작성합니까? dev db로 모든 것을 덮어 쓴 다음 일부 설정 / 변수를 변경하는 것 같습니다. 또한 현재 귀하의 사이트에서 어떤 학교를 사용하고 있습니까? 각 접근법에 대한 장단점이 있습니까?
Chaulky

옵션 1에서는 이제 node_export를 사용하여 컨텐츠를 정기적으로 보냅니다 (이전 컨텐츠가 제거됨). 우리는 개발자와 제품 모두에서 콘텐츠를 변경했습니다. 이것은 실제로 내가 보지 못한 몇 곳에서 일반적인 시나리오이지만 분명히 이상적이지는 않습니다. 이것이 내가 방향을 추가하고 그 방향을 고수하는 이유입니다. 콘텐츠는 dev-> prod 또는 prod-> dev이지만 두 가지를 모두 시도하지 마십시오. 그리고 그렇습니다. 우리는 기본적으로 덮어 쓰기를합니다. 나의 새로운 일에서 우리는 # 2를하고, 나의 오래된 일에서 우리는 # 1을했지만 # 2로 옮겨 가고 있습니다 (여전히 그들에 대한 컨설팅을하고 있습니다).
coderintherye

1

SQL 파일에서 라이브 사이트 사본 및 개발 사이트 사본의 데이터베이스를 덤프하십시오 (두 덤프에 동일한 매개 변수 및 설정 사용).
그런 다음 작은 비교 도구 ExamDiff를 사용하여 두 SQL 파일을 비교하십시오 . 파일 차이가 다른 색상과 나란히 표시됩니다. 스크롤없이 차이점으로 바로 이동할 수 있습니다. 라이브 사이트의 SQL 파일에 차이를 추가하고 줄을 추가 / 편집하십시오. 해당 파일에 개발 환경의 절대 경로 / URL이 없는지 확인하십시오. 끝났습니다! 라이브 사이트의 데이터베이스를 복원 할 시간입니다.
인생을 더 편하게 만드십시오 :첫 번째 단계에서는 변경된 테이블 만 덤프하십시오. 예를 들어, 별도의 테이블을 대상으로하는 개발 사본에서 모듈을 편집 한 경우이 테이블 만 덤프하십시오. 특정 테이블에 대해 잘 모르면 전체 데이터베이스 덤프가 좋습니다.


이 기술은 일부 중요한 상황에서 심각한 한계가 있습니다. 예를 들어, 개발 사이트에 새 노드가있는 경우 두 데이터베이스에는 모두 동일한 노드 ID를 가진 항목이 포함되며 참조를 분석하고 SQL 데이터베이스의 텍스트 덤프에서 병합 할 수 없습니다. 다른 답변에서 언급했듯이 이러한 종류의 작업은 기능 및 배포를 통해 더 잘 처리됩니다.
greg_1_anderson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.