繁体   English   中英

如何将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM