詳細検索

Capistrano 3에서 작업이 두 번 시작될 때 해야 할 일

아바타
글쓴이 maeno
2분 읽기

Capistrano 3에서 작업이 두 번 시작될 때 해야 할 일
日本語에서 번역 • 원문 보기

Capistrano3에서 다른 스테이지 환경에서 작업을 실행했을 때, 작업이 두 번 실행되는 증상에 빠졌습니다. 작업이 두 번 실행되기 때문에, AWS 인스턴스를 "2"로 실행하라고 설정해도 "4번"이 발생하고, MySQL에 발행된 쿼리가 두 배가 되고, 삽입할 레코드도 중복 삽입됩니다. 파일에 임시로 기록된 설정들도 이후 작업이 두 배로 실행되면서 덮어써졌고, 배포 상태는 이미 엉망이었습니다. 이제 문제를 해결할 수 있었으니, 그때 해야 할 일에 대한 메모를 남기겠습니다.

그 이유는 기본 배포 환경이 인보크 설정에 명시되어 있었기 때문입니다.

테스트 환경에서 배포 작업을 개발할 때, 캡파일에 다음과 같은 설정을 작성했습니다.

Rake::Task[:d evelop].invoke
인보크 :d에블롭

이 글을 쓰면 기본 배포 환경이 '개발'로 고정되므로, 배포 명령을 실행할 때 배포 환경(단계명)을 지정해야 합니다.

$ Cap 개발 배포:task_name

이렇게 하는 거야,

$ 캡 전개:task_name

배포 환경을 생략하는 것이 조금 더 쉬웠지만, 기본 배포 환경 외의 배포 시 부정적인 영향을 미쳤습니다.

이번에는 테스트 환경에서 배포가 잘 진행되어 다음 배포는 프로덕션 환경에서 진행되었고, 배포 환경(스테이지명)은 'production'으로 실행되었습니다. 배포 내용이 테스트 환경과 정확히 동일했기 때문에 배포 작업 설정에 차이가 없었고, 역할 설정과 SSH 연결 설정도 동일했기 때문에 'config/deploy/develop.rb'를 복사하고 'config/deploy/production.rb'를 만들었습니다. 이 상태에서 배포 환경을 지정하고 아래에 보이는 대로 배포를 실행했습니다.

$ 캡 생산 배치:task_name

이로 인해 생략된 기본 배포 환경으로의 배포도 동시에 시작됩니다. 실제로,

$ Cap 개발 프로덕션 배포:task_name

이는 두 개의 환경을 지정하고 배포를 수행하는 것과 같습니다.

이 상태를 없애려면 위에서 언급한 호출 설정을 삭제하면 됩니다. 즉, 여러 환경에 배포할 때 혼란을 유발할 수 있으므로 호출 설정을 사용하지 않는 것이 좋습니다.

아니요, 몇 시간 동안 중독되어 있다가 결국 해결했어요. 앞으로는 조심해야 해요.

Related Articles