2010-09-29 2 views
8

Согласно http://rake.rubyforge.org/files/doc/rakefile_rdoc.html, вы можете создать задачу, которая принимает параметры, а также имеет предпосылки:Использование задачи рейки, который принимает параметры, как необходимое условие

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

Но что, если: pre_name является задачей, которая также принимает параметры? Каков синтаксис для передачи параметров: pre_name, когда он используется как необходимое условие?

ответ

0

У меня нет прямого ответа, но у меня есть альтернативное решение, которое может сработать для вас. Ни одна из моих задач рейка не использует параметры. (Я думаю, что я пытался использовать параметры и не мог заставить их работать.) Вместо этого я полагаюсь на массив ENV. Так, например, я хотел бы написать, что пример задачи, как:

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

, который будет вызываться, как:

$ rake name first_name=John last_name=Smith 

Данные массива ENV будут доступны для задачи pre_name, а также.

3

Я знаю, что опаздываю на вечеринку, но у меня была такая же проблема, и я понял, что не использовал переменные среды. Вы можете использовать Rake::Task.invoke для этого. Вот пример для задания резервного копирования базы данных грабель:

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

Хотя это работает, обратите внимание, что это не создаст Вызванную задачу в качестве явной зависимости обязательного условия. – ledhed2222

9

Это на самом деле довольно просто -: предварительная задача будет получать те же параметры, что и оригинальные задачи. Все, что вам нужно сделать, это убедиться, что подпись подобна - например, если первая задача получает: a:: b: pre task также должна получить их.

Подробнее здесь: rake with params

+0

Отлично! Только то, что мне нужно! – 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

Вы можете отметить исходный код четырьмя ведущими пробелами - но на что вы хотите ответить? Пожалуйста, сообщите некоторые сведения о том, что вы хотите сказать, используя пример кодирования. – knut