Использование грабли задачи, которая принимает параметры в качестве предварительного условия - PullRequest
8 голосов
/ 29 сентября 2010

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

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

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

Ответы [ 4 ]

9 голосов
/ 22 сентября 2011

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

Подробнее здесь: грабли с параметрами

4 голосов
/ 30 июня 2011

Я знаю, что опаздываю на вечеринку, но у меня была та же проблема, и я понял кое-что, что не использовало переменные среды.Вы можете использовать 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 голосов
/ 28 сентября 2015
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 голосов
/ 30 сентября 2010

У меня нет прямого ответа, но у меня есть альтернативное решение, которое может работать для вас.Ни одна из моих задач не использует параметры.(Я думаю, что я пытался использовать параметры и не мог заставить их работать.) Вместо этого я полагаюсь на массив 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...