it-gundan.com

복잡한 변경 사항 배포

데이터베이스 (새 테이블 또는 변경된 테이블) 및 동적 소스 코드 (예 : PHP 또는 ColdFusion)를 변경해야하는 웹 사이트에 상당히 복잡한 변경 사항을 배포해야하는 경우가 있습니다. 라이브 웹 사이트의 모든 것을 손상시키지 않고 이러한 변경 사항을 신속하게 패키지하고 배포하는 가장 좋은 방법은 무엇입니까?

4
Justin Scott

짧은 대답 : 목에 통증이 있습니다!

나는 이것을 여러 번해야했다. 그리고 매번 내가 할 다음 프로젝트에서 내 디자인에 대해 더 많이 생각하고 싶다. 내가하는 일은 배포로 이동하기 전에 코드 버그를 개발 섹션 (또는 폴더 또는 서버 등)으로 포크하여 모든 버그가 있는지 확인하기 위해 별도로 작업 할 수 있도록하는 것입니다. 그런 다음 항상 처음 두 줄이 같은 SQL 스크립트를 만듭니다.

DELETE IF EXISTS newDatabaseName;
CREATE DATABASE newDatabaseName;

이렇게하면 스크립트가 모든 것을 완전히 새로운 빈 데이터베이스에 넣을 수 있습니다. 나머지 스크립트는 이전 데이터베이스에서 새 데이터베이스로 재사용하는 모든 테이블을 다시 작성합니다. 그런 다음 새 (또는 수정 된) 테이블을 새 데이터베이스에 작성합니다. 마지막으로 모든 데이터를 라이브 서버에서 개발 서버로 옮길 것입니다. 이동하는 데이터의 양과 이동 속도에 따라 시간이 오래 걸릴 수 있으므로 스크립트 실행에 대한 부담이 적을수록 스크립트를 신중하게 생각하는 것이 좋습니다.

새 개발 데이터베이스를 설치하고 실행 한 후 나머지는 새 코드를 작성하여 사용합니다. 일단 해시되면 배포가 상대적으로 쉬워야하지만 시간이 많이 걸릴 수도 있습니다. 동일한 스크립트를 사용하여 새 라이브 데이터를 모두 배포 서버의 새 데이터베이스에 복사하고 새 코드를 복사하면됩니다.

이것이 내가하는 방법이며, 고통 스럽지만 효과가 있습니다. 더 좋은 방법이 있다면 기뻐할 것입니다.

pdate : Tchalvak의 의견에 대한 응답으로 예, 일반적으로 실제 데이터없이 모든 테이블 정의를 가져 오기 위해 다음을 사용합니다.

mysqldump --databases --no-data databaseName > newScript.sql

그런 다음 위에서 설명한대로이 스크립트를 변경합니다.

3
Mike

"롤백 기능"을 얻으려면 git 또는 Mercurial(분산 버전 제어 시스템) 을 아는 것이 좋습니다.

플랫 파일에서 소스 코드로 작업해야하는 시대는 이제 끝났습니다 (이제 플랫 파일에서 작업해야하지만 파일을 추적하는 강력한 변경 제어 시스템이 있어야합니다).

2
Kzqai

나는 일반적으로 (램프 스타일 사이트) :

  1. 변경 사항 정의 그런 다음 적용 할 스크립트를 작성하십시오 (Makefile을 사용합니다).
  2. Test 실제 환경을 나타내는 데이터 샘플에 대한 변경 사항
  3. 테스트 다시 확인
  4. 나에게 방법을 줘, 롤백하는 능력

클러스터를 실행중인 경우 사이트 상태, 캐시 등으로 인해 더 큰 골치 거리가있을 수 있습니다.

0
Aiden Bell