2009-11-06 5 views
5

J'ai un système de construction qui se compose de plusieurs sous-répertoires avec des projets, où dans chacun d'eux il y a un rakiefile séparé (ou un couple de rakefiles). Non le répertoire de premier niveau a un fichier rake qui traverse tous les sous-répertoires et appelle rake via: system ("rake"), obtient les paquets résultants et les envoie à la machine appropriée. Y a-t-il une façon plus élégante de le faire? J'ai essayé Rake.application.load() mais cela ne semble pas accepter n'importe quel argument quant à quel fichier doit être chargé (comme je l'ai mentionné parfois il y a 2 rakefiles dans chaque sous-répertoire),Rake multicoupe

+0

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

Répondre

2

Ok, je solution qui est basée sur ce que knoopx dit. Voici mon fichier maître:

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 

Chaque sous-répertoire dans le sous-répertoire doit contenir la définition de la tâche par défaut.

1

une nouvelle Rakefile à la racine de votre grand projet et charger dynamiquement votre sous-projet Rakefiles

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

Ce problème est partiellement résolu. Je suis capable d'appeler des tâches à partir d'autres fichiers mais il semble que les dépendances ne sont pas traitées. Donc, avoir le fichier principal, avec votre code qui appelle sous rakefile avec tâche: default =>: foo tâche: foo faire met "foo" fin tâche "foo" est pas appelé – paszczi