2010-09-29 10 views

Odpowiedz

0

Nie mam bezpośredniej odpowiedzi, ale mam alternatywne rozwiązanie, które może ci pomóc. Żadne z moich zadań rake nie używa parametrów. (Myślę, że próbowałem użyć parametrów i miałem problemy z ich uruchomieniem.) Zamiast tego polegam na tablicy ENV. Tak więc, na przykład, chciałbym napisać, że przykładowe zadania jak:

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

które mogłyby być uznane za:

$ rake name first_name=John last_name=Smith 

Dane array ENV byłby dostępny do zadania pre_name również.

3

Wiem, że spóźniam się na imprezę, ale miałem ten sam problem i wymyśliłem coś, co nie używa zmiennych środowiskowych. W tym celu można użyć Rake::Task.invoke. Oto przykład dla zadania tworzenia kopii zapasowych bazy danych natarcia:

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

Chociaż to działa, trzeba pamiętać, że nie będzie skonfigurować wywoływane zadanie jako wyraźną zależność nieodzowna. – ledhed2222

9

To rzeczywiście bardzo proste -: pre zadanie otrzyma takie same parametry jak oryginalne zadania. Wszystko, co musisz zrobić, to upewnić się, że podpis jest podobny - na przykład, jeśli pierwsze zadanie otrzyma: a,: b: pre zadanie również je otrzyma.

Zobacz więcej tutaj: rake with params

+0

Doskonały! Dokładnie to, czego potrzebowałem! – 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

Możesz oznaczyć kod źródłowy 4 spacjami wiodącymi - ale na co chcesz odpowiedzieć? Podaj informacje, które chcesz przekazać w swoim przykładzie kodowania. – knut

Powiązane problemy