2009-11-06 13 views
5

Her birinde ayrı bir rakı (ya da bir çift rakleganın) olduğu projelere sahip çeşitli alt dizinlerden oluşan bir derleme sistemim var. Hayır, üst düzey dizinin tüm alt dizinlerden geçen bir rakefile yok ve sistem üzerinden "rake" (rake) yoluyla çağrıyı çağırır, sonuçta paketler alır ve bunları uygun makineye gönderir. Bunu yapmanın daha zarif bir yolu var mı? Rake.application.load() 'ı denedim ama bu hangi dosyanın yüklenmesi gerektiği ile ilgili herhangi bir argümanı kabul etmiyor gibi görünüyor (bazen her altdizininde 2 rakefile olduğunu belirttiğim gibi),Çok katlı rake yapısı

+0

İlgili https://stackoverflow.com/questions/28238838/rakefile-to-process-multiple-projects –

cevap

2

Tamam yükleyin. alt dizininde

task :default do 
    FileList["*/**/rakefile*.rb"].each do |project| 
     # clear current tasks 
     Rake::Task.clear 
     #load tasks from this project 
     load project 
     if !Rake::Task.task_defined?(:default) 
      puts "No default task defined in #{project}, aborting!" 
      exit -1 
     else 
      dir = project.pathmap("%d") 
      Dir.chdir(dir) do 
       default_task = Rake::Task[:default] 
       default_task.invoke() 
      end 
     end 
    end 
    puts "Done building projects" 
end 

Her rakefile varsayılan görev tanımını içermelidir: İşte benim ana dosyasıdır.

1

Sadece oluştur yeni sizin büyük projenin kökünde Rakefile ve dinamik dediğimi knoopx dayanmaktadır çözümü var, sizin alt proje Rakefiles

Dir.glob(File.join(File.dirname(__FILE__), '**', 'Rakefile')).each do |tasks| 
    load tasks 
end 
+0

Bu, kısmen sorunu çözer. Diğer dosyalardan görevleri çağırabilirim ancak bağımlılıkların işlenmediği anlaşılıyor. Yani ile alt rakefile çağıran kodla ilgili ana dosya sahip görev: Varsayılan =>: foo görev: foo "foo" görev "foo" çağrılmaz son verir do – paszczi