Как вы общаетесь между задачами Rake? - PullRequest
14 голосов
/ 26 февраля 2010

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

task :obtain do
  # obtain files from somewhere
end

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

Допустим, цель :obtain не всегда помещает файлы в одну и ту же папку. Как мне пройти :compile путь, который :obtain нашел? Переменные среды?

Ответы [ 2 ]

13 голосов
/ 26 февраля 2010

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

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

11 голосов
/ 26 февраля 2010

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...