2010-09-29 5 views
8

Selon http://rake.rubyforge.org/files/doc/rakefile_rdoc.html, vous pouvez créer une tâche qui accepte les paramètres et a également pré-requis:l'aide d'une tâche de râteau qui accepte les paramètres comme condition préalable

task :name, [:first_name, :last_name] => [:pre_name] do |t, args| 

Mais si: pre_name est une tâche qui accepte également les paramètres? Quelle est la syntaxe pour passer des paramètres à: pre_name lorsqu'il est utilisé comme prérequis?

Répondre

0

Je n'ai pas de réponse directe, mais j'ai une autre solution qui pourrait fonctionner pour vous. Aucune de mes tâches de rake n'utilise de paramètres. (Je pense que j'ai essayé d'utiliser des paramètres et j'ai eu du mal à les faire fonctionner.) Au lieu de cela, je compte sur la matrice ENV. Ainsi, par exemple, je voudrais écrire cette tâche exemple que:

task :name =>:pre_name do 
    do_something_with_name(ENV['first_name'], ENV['last_name']) 
end 

qui serait invoquée comme:

$ rake name first_name=John last_name=Smith 

Les données du tableau ENV seraient disponibles à la tâche de pre_name ainsi.

3

Je sais que je suis en retard à la fête, mais j'ai eu le même problème et j'ai trouvé quelque chose qui n'utilisait pas les variables d'environnement. Vous pouvez utiliser Rake::Task.invoke pour ce faire. Voici un exemple pour une tâche de râteau sauvegarde de base de données:

namespace :db do 
    task :dump_db, [:dump_file, :rails_env] do |t, args| 
     puts "dumping to #{args[:dump_file]} with rails env = #{args[:rails_env]}" 
    end 

    task :stop_slave do 
     puts "stopping slave" 
    end 

    task :start_slave do 
     puts "starting slave" 
    end 

    task :upload_dump, [:dump_file] do |t, args| 
     puts "uploading #{args[:dump_file]}" 
    end 

    task :backup_to_s3, [:dump_file, :rails_env] do |t, args| 
     Rake::Task["db:stop_slave"].invoke() 
     Rake::Task["db:dump_db"].invoke(args[:dump_file], args[:rails_env]) 
     Rake::Task["db:start_slave"].invoke() 
     Rake::Task["db:upload_dump"].invoke(args[:dump_file]) 
    end 
end 
+0

Bien que cela fonctionne, notez qu'il ne sera pas mis en place la tâche invoquée comme une dépendance explicite préalable. – ledhed2222

9

Il est en fait assez simple - la: tâche pré recevra les mêmes paramètres que la tâche d'origine. Tout ce que vous avez à faire est de vous assurer que la signature est similaire - par exemple si la première tâche reçoit: a,: b la: pré tâche doit également les recevoir.

Voir plus ici: rake with params

+0

Excellent! Juste ce dont j'avais besoin! – nterry

-1
namespace :shell do 

    desc "Local hostname" 
    task :hostname do 
    puts "Local hostname" 
    sh "hostname" 
    end 

    desc "Local uptime" 
    task :uptime do 
    puts "Local uptime" 
    sh "uptime" 
    end 

    desc "Echo something" 
    task :echo,[:someword] do |t,args| 
    puts "--- #{args[:someword]} ---" 
    end 

end 


desc "Run all tasks" 
task :all , [:someword] => ["shell:hostname","shell:uptime","shell:echo"] do 
    puts "Done." 
end 
+0

Vous pouvez marquer le code source avec 4 espaces principaux - mais à quoi voulez-vous répondre? S'il vous plaît donner quelques informations que vous voulez dire avec votre exemple de codage. – knut

Questions connexes