簡體   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