2009-11-06 18 views
5

Ho un sistema di compilazione costituito da diverse sottodirectory con progetti, in cui in ciascuna di esse è presente un rakiefile separato (o una coppia di rakefile). No, la directory di livello superiore ha un rakefile che passa attraverso tutte le sottodirectory e chiama rake tramite: system ("rake"), ottiene i pacchetti risultanti e li invia al computer appropriato. C'è un modo più elegante per farlo? Ho provato Rake.application.load() ma questo non sembra accettare alcun argomento su quale file deve essere caricato (come ho menzionato a volte ci sono 2 rakefiles in ogni sottodirectory),Creazione rastrello multifile

+0

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

risposta

2

Ok, ho la soluzione che si basa su ciò che knoopx detto. Qui è il mio master file:

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 

Ogni rakefile nella sottodirectory deve contenere definizione di attività predefinita.

1

Basta creare un nuovo Rakefile alla radice del vostro grande progetto e dinamicamente caricare il sotto-progetto Rakefiles

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

Questo risolve parzialmente il problema. Sono in grado di chiamare attività da altri file ma sembra che le dipendenze non vengano elaborate. Quindi, avendo file principale, con il codice che chiama sub rakefile con compito: default =>: foo compito: foo do mette "pippo" fine compito "foo" non è chiamato – paszczi

Problemi correlati