2011-11-10 4 views
8

프로덕션 서버에서 소스 파일을 업데이트 (저장소에서 가져 와서 업데이트)하고, 마이그레이션을 실행하고 캐시 된 자산을 다시 생성해야합니다.symfony 2에서 프로덕션 애플리케이션을 안전하게 업데이트하기 위해 유지 보수 모드로 들어가는 방법은 무엇입니까?

안전하게 작업을 수행하는 심포니이 어떤 메커니즘이 있습니까? 사이트를 '유지 보수 모드'(503을 던져야 함) 또는 무언가에 넣는 것처럼?

답변

3

나는이를 구현하는 것이 방법을 결정하기 위해 노력했습니다. 한편, Symfony2 괜찮은 자극 캐싱을 제공합니다, 그래서 당신은 파괴적 데이터베이스 스키마를 (등 열 또는 테이블을 제거)를 수정하지 않는 경우, 당신은 아마 다음, 당신의 repo에서 배포 스키마를 변경하여 자극을 삭제 멀리 얻을 수 있습니다 은닉처. 그것이 내가 대부분의 일을 처리하는 방법입니다. 유지 관리 모드로 전환 할 경우

한편

, 당신은 프레임 워크 (즉, 당신은 아마 커널을 해고하고 싶지 않아)에 최소한의 부하가있는 솔루션을 원하거나 것 어쨌든 목적을 무 찌르다 : 당신이 사물로 찌르는 동안 프레임 워크에서 부하를 제거하라.

나는 503 헤더를 설정하는 간단한 유지 관리 스크립트를 작성하고 일부 정적 HTML (내 사이트 템플리트에서 미리 생성)을 사용자에게 전송 한 다음 일부 조건부 내 app.php에서 논리를 사용하면 유지 관리 모드에 있어야합니다. 못생긴지만 작동합니다.

+0

정말 그렇게 복잡합니까? 구성 옵션을 기반으로 와일드 카드 라우트를 추가 할 수 없습니까? –

+0

유일한 문제는 프레임 워크를로드해야한다는 것입니다. 업데이트하는 동안 변경 사항이 중단되지 않으면 실제로가는 길입니다. 그렇지 않으면 수동 스크립트가 가장 좋은 방법 일 것입니다. – Problematic

+0

app.php 파일을 내가 만든 maintenance.php 파일로 바꿉니다. 배포가 끝나면 app.php가 되돌아옵니다. – tmas

1

사용자가 일종의 거래 (예를 들어 쇼핑)의 중간에있을 수있는 더 큰 사이트에 대해서는 어떻게해야할지 모르지만 소규모 사이트의 경우에는 .htaccess 파일 (그 중 하나 귀하의 루트라고 가정하는 웹 디렉토리)를 app.php가 아닌 유지 보수 페이지로 리디렉션하십시오.

5

난 그냥 유지 관리 모드로 응용 프로그램을 넣어 당신에게 콘솔이 추가-명령을 제공 심포니 2에 대한 번들을 발견했습니다. 여기 있습니다 : https://github.com/lexik/LexikMaintenanceBundle

+1

LexikMaintenanceBundle은 훌륭하지만 Symfony가 작동해야합니다. CorleyMaintenanceBundle 내 생각에 아파치/Nginx 수준에서 작동하기 때문에 더 낫다. – TheFrost

1

배포자 (http://deployer.org/)를 사용하여 Symfony2 응용 프로그램을 배포하는 것이 좋습니다. 이렇게하면 유지 관리 페이지가 필요 없습니다. 이 툴은 심포니 2와 symfony3 템플릿이 이미 포함되어 제공됩니다. 애셋을 생성하고 캐시를 워밍업하며 출시 디렉토리를 추적합니다. 이전 릴리스로 쉽게 롤백 할 수 있습니다. 항상 현재 릴리스 디렉토리를 가리키는 "현재"-symlink가 있습니다. 릴리스 배포가 완료되면이 링크가 새로 생성 된 릴리스 디렉토리로 업데이트됩니다.

에 관한 교리 마이그레이션은 해당위한 사용자 지정 작업을 작성해야합니다.