[英]How can I place capistrano stages into a sub-directory?
默認情況下,capistrano階段位於/config/deploy/
。 我這里有很多階段。 我還希望將我的一些階段分組為/config/deploy/group1/
和/config/deploy/group2
。 我怎么能包含多條路徑?
我注意到你可以這樣設置:
set :stage_config_path, 'cap/stages'
但是我需要它在config / deploy中遞歸查看而不是僅在該文件夾中查找。
如果我甚至可以做以下事情那將是很好的:
$ cap group1/stage1 deploy
我將如何在Ruby on Rails應用程序中完成此操作?
我能夠覆蓋一些Capistrano方法來使其工作。 我在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
文件。
下一個問題是capistrano/setup.rb
有這行代碼:
load stage_config_path.join("#{stage}.rb")
這意味着我需要stage
來包含文件夾名稱。 然后我#stages
以便names
變量是一個階段數組,包括子目錄(如果有的話)。 例:
config/
├── deploy/
│ ├── group_1/
| ├── ├── stage1.rb
│ ├── stage2.rb
│ ├── stage3.rb
變為:
['group_1/stage1', 'stage2', 'stage3']
這允許創建Rake任務並正確加載文件!
$ cap group_1/stage1 deploy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.