2010-03-23 8 views
3

정기적으로 코드를 업데이트하는 웹 사이트가 있습니다. 나는 버전 관리에서 그것을 지킨다. 새 버전의 사이트를 배포하려는 경우 내보내기를 수행 한 다음 제공된 디렉토리 이름을 배포 디렉토리로 심볼릭 링크합니다.PHP, 사용자 업로드 파일, 버전 관리 및 웹 사이트 배포

사용자가 파일을 업로드 할 수있는 곳이 있습니다. 새로운 버전을 배포 한 후 사용자 파일이 사라진 것을 알았습니다. 물론, 나는 그것들을 저장소에 추가하지 않았고, 제공된 사이트는 내보내기에서 왔기 때문에, 어쨌든 버전 제어 된 디렉토리에 업로드되지 않았습니다.

PHP에는 아직 svn 기능이 통합되어 있지 않으므로 사용자가 업로드 한 파일에 프로그래밍 방식으로 많은 작업을 할 수 없습니다. 내 솔루션은 제공된 웹 사이트에 대한 병렬 디렉토리에있는 추가 웹 사이트 files.website.com을 작성하여 버전 제어하에있는 디렉토리에서 제공됩니다. 그런 식으로 웹 사이트를 업그레이드 할 때 그들은 지워지지 않습니다. 때로는 수동으로 업로드 된 파일을 svn 프로젝트에 추가하고 삭제 된 사용자 삭제 된 파일을 삭제하고 새 버전을 커밋합니다. 나는 이것을 수행하기 위해 cron에서 실행하는 쉘 스크립트를 작업하고 있지만, 그것이 나의 장점이 아니므로 긴급한 필요가 없으므로 backburner에있다.

더 좋은 방법이 있나요?

답변

4

나는 보통 사용자 생성 데이터/파일을 svn에 보관하지 않습니다. 코드, db 스키마/테스트 데이터 만. 내가 일반적으로 배포 할 일은 업로드 디렉토리와 .svn 디렉토리를 제외하는 최신 작업 복사본의 rsync입니다. IMO 콘텐츠는 버전 제어가 아닌보다 전통적인 파일 시스템/db 백업 메커니즘에 의해 처리되어야합니다.

편집 :

그냥 명확하게 할 수는 심볼릭 링크 전략은 좋은 방법처럼 보인다. 너는 생각하는 백업 부분을 잃어 버렸어. ID는 아마도 tar | gzip이며, SVN과 상호 작용하지 않고 cron 작업에 업로드 된 내용 일뿐입니다. 그리고 아마도 mysqldump을 사용하여 db를 덤프하고 별도로 gzip을 덤프해야 할 수도 있습니다.

4

업그레이드가 필요하지만 사용자가 업로드 한 콘텐츠가있는 버전 제어 된 디렉토리 외부의 디렉토리에 대한 심볼릭 링크가 있으므로 사이트를 내보내는 관행을 계속합니다. 이 방법으로 내보내기를 할 때 기호 링크가 날아가 버리면 다시 만들면됩니다. 그런 다음 필요에 따라 해당 사용자 콘텐츠를 백업해야합니다.

0

수동으로 심볼 링크를 내보내고 관리하는 대신 프로덕션 지점에서 배포 디렉토리를 서브 버전 체크 아웃으로 만들 수 있습니다. 그렇게하면 배포는 프로덕션 지점에 대한 업데이트를 확인하는 것만 큼 간단합니다.

Subversion 서버 및 호스팅 설정을 충분히 제어 할 수 있고 Subversion 저장소가 "실행할 준비가되었습니다." 이 상황에서 사용자 디렉토리는 Subversion의 빈 자리 표시 자일 수 있으며 커밋시 실행되는 업데이트 프로세스에 의해 혼자있게됩니다 (보통 svn update의 비즈니스). 나는 (@ Flash84x와 @prodigitalson에 언급 된 바와 같이) 사용자 컨텐트를 백업하는 별도의 프로세스를 여전히 추천 할 것이다.

설정 방법에 대한 설명이있는 Ars Technica article이 있습니다.

업데이트 :이 방법을 사용하는 경우 웹 서버가 배포 체크 아웃에서 .svn 파일에 대한 액세스를 허용하지 않는지 확인하십시오.

+0

그래,하지만 심볼릭 링크를 관리하는 것의 한 가지 이점은 바로 심볼릭 링크를 변경하여 이전 라이브 버전으로 즉시 롤백 할 수 있다는 것입니다. – user151841

+0

@ user151841 : 링크를 변경하는 동일한'svn merge -r HEAD : $ PREV_REV $ SVN_URL' grantd를 수행하기 위해 역 병합을 수행 할 수도 있습니다 .-) – prodigitalson