Как Вы связываетесь между задачами Граблей?

Скажем, у меня есть цель, кто должен скомпилировать некоторые файлы. Та цель имеет другую цель как предпосылку, та, которая получает файлы. Скажем, это:

task :obtain do
  # obtain files from somewhere
end

task :compile => :obtain do
  # do compilation
end

Скажем, то, что :obtain цель делает не, всегда помещает файлы в ту же папку. Как я передал бы :compile путь это :obtain найденный? Переменные среды?

14
задан Geo 26 February 2010 в 07:27
поделиться

2 ответа

Использование ENV['something'], на мой взгляд, предпочтительнее, потому что если вы сделаете это таким образом (в отличие от переменных $global или @instance), вы можете рассматривать их как аргументы задачи, и легко использовать подзадачу из командной строки.

С другой стороны, если вы храните свой код в отдельных классах / модулях / методах, вам даже не придется иметь дело с такого рода хаками + ваш код будет более тестируемым.

13
ответ дан 1 December 2019 в 12:13
поделиться

Один из способов - хранить его в глобальной переменной:

task :obtain do
  $obtained_dir = "/tmp/obtained"
end

task :compile => :obtain do
  puts "compiling files in #{$obtained_dir}"
end

Переменные экземпляра (например, @obtained_dir) также должны работать.

Другим способом было бы вытащить код "get" в метод, как показано ниже:

task :obtain do
  obtain_files
end

task :compile do
  obtained_dir = obtain_files
  puts "compiling files in #{obtained_dir}"
end

def obtain_files
  #obtain files from somewhere
  "/tmp/obtained_files"
end
11
ответ дан 1 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: