2010-02-26 5 views
14

Disons que j'ai une cible qui doit compiler certains fichiers. Cette cible a une autre cible en tant que prérequis, celle qui obtient les fichiers. Disons ceci:Comment communiquez-vous entre les tâches Rake?

task :obtain do 
    # obtain files from somewhere 
end 

task :compile => :obtain do 
    # do compilation 
end 

Disons que la cible :obtain ne met pas toujours les fichiers dans le même dossier. Comment est-ce que je passerais :compile le chemin que :obtain trouvé? Variables d'environnement?

Répondre

13

En utilisant ENV [ « quelque chose »] est à mon avis préférable, parce que si vous le faites de cette façon (par opposition aux variables $ global ou @instance), vous pouvez les traiter comme des arguments de tâche, et utiliser facilement la sous-tâche depuis la ligne de commande. D'autre part, si vous conservez votre code dans des classes/modules/méthodes séparés, vous n'aurez plus à faire face à ce genre de hacks + votre code sera plus testable.

+0

Oui. C'est ainsi que j'ai fini par le faire. Merci! – Geo

+0

Gardez à l'esprit que ENV ne peut prendre des chaînes que comme des clés et des valeurs, alors que cette restriction peut ne pas avoir d'importance dans le cas de noms de fichiers, elle peut ne pas être une bonne solution pour d'autres types de valeurs. – Dologan

10

Un moyen serait de le stocker dans une variable globale:

task :obtain do 
    $obtained_dir = "/tmp/obtained" 
end 

task :compile => :obtain do 
    puts "compiling files in #{$obtained_dir}" 
end 

variables d'instance (à savoir @obtained_dir) devraient également fonctionner.

Une autre façon serait de tirer le code « obtenir » dans une méthode, comme suit:

task :obtain do 
    obtain_files 
end 

task :compile do 
    obtained_dir = obtain_files 
    puts "compiling files in #{obtained_dir}" 
end 

def obtain_files 
    #obtain files from somewhere 
    "/tmp/obtained_files" 
end 
+1

+1 pour la méthode put-it-in-a-method pour cela. tâche: obtenir ne semble pas être une tâche du tout, c'est juste une méthode que les autres appellent. –

Questions connexes