默认情况下,capistrano阶段位于/config/deploy/
。我这里有很多阶段。我还想将我的一些阶段分组为/config/deploy/group1/
和/config/deploy/group2
。我怎么能包含多条路径?
我注意到你可以设置这个:
set :stage_config_path, 'cap/stages'
但是我需要它在config / deploy中递归查看,而不是只在该文件夹中查找。
如果我甚至可以做以下事情,那就太好了。
$ cap group1/stage1 deploy
我如何在Ruby on Rails应用程序中完成此操作?
答案 0 :(得分:2)
我能够覆盖一些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