나는 이것을 작동시키기 위해 일부 카피스트라노 방법을 오버라이드 할 수있었습니다. 내 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