2017-01-27 16 views
1

デフォルトでは、カイストラーノステージは/config/deploy/に配置されています。私はここに1トンのステージを持っています。また、私の舞台の一部を/config/deploy/group1//config/deploy/group2のようにグループ化したいと思っています。どのように複数のパスを含めることができますか?カイストラーノステージをサブディレクトリに配置するにはどうすればよいですか?

私はあなたがこの設定可能性が気づい:

set :stage_config_path, 'cap/stages' 

をしかし、私はそれだけでそのフォルダに展開の代わりに、/ configので再帰的に調べる必要があります。私も同様のことを行うことができればいいだろう

$ cap group1/stage1 deploy 

私はRailsアプリケーション上で私のRubyでこれを実現するに行くかどう?

答えて

2

私は、これを動作させるためにいくつかのカピストラノの方法を無効にすることができました。私は私の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ファイルを探すということに**/を追加しました。私は、フォルダ名を含めるstageを必要とする意味

load stage_config_path.join("#{stage}.rb") 

次の問題は、capistrano/setup.rbは、このコード行を持っていたことでした。次に、#stagesを上書きして、namesという変数がサブディレクトリを含むステージの配列になるようにしました。例:

config/ 
├── deploy/ 
│ ├── group_1/ 
| ├── ├── stage1.rb 
│ ├── stage2.rb 
│ ├── stage3.rb 

は次のようになります。

のRakeタスクが作成され、正しくファイルをロードすることができます
['group_1/stage1', 'stage2', 'stage3'] 

$ cap group_1/stage1 deploy 
関連する問題