如何将 Capistrano 阶段放入子目录中?
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
默认情况下,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