Как вы общаетесь между задачами Rake?
Скажем, у меня есть цель, которая должна скомпилировать некоторые файлы. У этой цели есть еще одна цель в качестве предпосылки, которая получает файлы.
Скажем так:
task :obtain do
# obtain files from somewhere
end
task :compile => :obtain do
# do compilation
end
Скажем, что цель :obtain
не всегда помещает файлы в одну и ту же папку. Как передать :compile
путь, найденный :obtain
? Переменные среды?
Ответы
Ответ 1
Использование ENV ['something'] на мой взгляд предпочтительнее, потому что если вы сделаете это так (в отличие от переменных $global или @instance), вы можете рассматривать их как аргументы задачи и легко использовать подзадачу из командной строки.
С другой стороны, если вы сохраняете свой код в отдельных классах/модулях/методах, вам даже не придется иметь дело с этими типами хаков + ваш код будет более подвержен проверке.
Ответ 2
Один из способов - сохранить его в глобальной переменной:
task :obtain do
$obtained_dir = "/tmp/obtained"
end
task :compile => :obtain do
puts "compiling files in #{$obtained_dir}"
end
Также должны работать переменные экземпляра (т.е. @obtained_dir
).
Другим способом было бы вывести код "получить" в метод следующим образом:
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