2010-09-29 5 views
8

Nach http://rake.rubyforge.org/files/doc/rakefile_rdoc.html akzeptiert, können Sie eine neue Aufgabe erstellen, die Parameter und hat auch Voraussetzungen akzeptiert:eine Harke Aufgabe verwenden, die Parameter als Voraussetzung

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

Aber was, wenn: pre_name ist eine Aufgabe, die auch Parameter akzeptiert? Wie lautet die Syntax für die Übergabe von Parametern an: pre_name, wenn es als Voraussetzung verwendet wird?

Antwort

0

Ich habe keine direkte Antwort, aber ich habe eine alternative Lösung, die für Sie arbeiten könnte. Keine meiner Rake-Aufgaben verwendet Parameter. (Ich glaube, ich habe versucht, Parameter zu verwenden und hatte Schwierigkeiten, sie zur Arbeit zu bringen.) Stattdessen verlasse ich mich auf das ENV-Array. So zum Beispiel, würde ich dieses Beispiel Aufgabe schreiben wie:

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

die als geltend gemacht werden würden:

$ rake name first_name=John last_name=Smith 

Die ENV-Array-Daten würden auch auf die pre_name Aufgabe zur Verfügung stehen.

3

Ich weiß, ich bin zu spät zur Party, aber ich hatte das gleiche Problem und etwas herausgefunden, dass keine Umgebungsvariablen verwendet. Sie können dazu Rake::Task.invoke verwenden. Hier ist ein Beispiel für eine Datenbanksicherung Rake Aufgabe:

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

Während dies funktioniert, beachten Sie, dass es nicht die Aufgabe aufgerufen als eine explizite Voraussetzung Abhängigkeit aufgebaut. – ledhed2222

9

Es ist eigentlich ziemlich einfach - die: pre Aufgabe wird es die gleichen Parameter wie die ursprüngliche Aufgabe erhalten. Alles, was Sie tun müssen, ist sicherzustellen, dass die Signatur ähnlich ist - zum Beispiel, wenn die erste Aufgabe empfängt: a,: b Die: pre-Aufgabe muss sie auch erhalten.

Sehen Sie hier mehr: rake with params

+0

Ausgezeichnet! Genau das, was ich brauchte! – 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

Sie können Quellcode mit 4 führenden Leerzeichen markieren - aber was möchten Sie beantworten? Bitte geben Sie einige Informationen, was Sie mit Ihrem Codebeispiel sagen möchten. – knut

Verwandte Themen