2017-01-27 5 views
1

기본적으로 카피스트라 노 스테이지는 /config/deploy/에 배치됩니다. 나는 여기에 무대가있다. 또한 /config/deploy/group1//config/deploy/group2과 같은 그룹으로 그룹화하고 싶습니다. 어떻게 여러 경로를 포함 할 수 있습니까? 어떻게 카피스트라 노 단계를 하위 디렉토리에 배치 할 수 있습니까?

난 당신이 설정할 수 있습니다주의 :

set :stage_config_path, 'cap/stages' 

을하지만 나는/설정에서 반복적으로 보는 대신 해당 폴더의 배포해야합니다. 심지어 같은 일을 할 수 있다면 좋을 것이다

:

$ cap group1/stage1 deploy 

내가 레일 응용 프로그램 내 루비이 달성 가겠어요 어떻게?

답변

2

나는 이것을 작동시키기 위해 일부 카피스트라노 방법을 오버라이드 할 수있었습니다. 내 Capfile의 맨 위에 다음 코드를 작성 :

module Capistrano 
    module DSL 
    module Stages 

     def stages 
     names = Dir[stage_definitions].map { |f| "#{File.dirname(f)}/#{File.basename(f, ".rb")}".gsub("#{stage_config_path.to_s}/", '') } 
     assert_valid_stage_names(names) 
     names 
     end 

     # Override stage_definitions to include subfolders 
     def stage_definitions 
     stage_config_path.join("**/*.rb") 
     end 
    end 
    end 
end 

설명

#stage_definitions 메서드를 재정의함으로써, 나는 그것이 하위 디렉토리에 .rb 파일을 찾을 것이라는 점에 **/을 추가했다. 내가 폴더 이름을 포함 stage 필요 의미

load stage_config_path.join("#{stage}.rb") 

:

다음 문제는 capistrano/setup.rb이 코드 줄을 한 것으로이었다. 그런 다음 #stages을 무효화하여 names 변수가 하위 디렉토리를 포함하여 단계의 배열이되도록합니다. 예 :

config/ 
├── deploy/ 
│ ├── group_1/ 
| ├── ├── stage1.rb 
│ ├── stage2.rb 
│ ├── stage3.rb 

가되다 :

레이크 작업을 생성하고 올바르게 파일을로드 할 수 있습니다
['group_1/stage1', 'stage2', 'stage3'] 

!

$ cap group_1/stage1 deploy