Как `rake` знает, где искать файлы Rakefile?

#rake

#rake

Вопрос:

Я пытаюсь лучше понять, как rake это работает. Я посмотрел на веб-сайт rake, чтобы посмотреть, как это работает, но там нет четкого объяснения того, как rake выполняется поиск файлов Rakefile и какие шаги он выполняет при разрешении зависимостей. Может кто-нибудь объяснить, как rake это работает?

Ответ №1:

По умолчанию rake будет искать один из этих файлов в каталоге, из которого вы его запускаете:

  • rakefile
  • Rakefile
  • rakefile.rb
  • Rakefile.rb

Вы можете посмотреть документы приложения Rake, чтобы увидеть этот список

Кроме того, любой файл ruby, включая другие файлы rakefile, может быть включен в стандартную require команду Ruby:

 require 'rake/loaders/external-rakefile'
  

в качестве альтернативы, вы можете import их:

 import 'rake/loaders/external-rakefile'
  

Чтобы сделать набор задач Rake доступным для использования из любого каталога, создайте .rake подкаталог в своем домашнем каталоге и поместите туда соответствующие файлы Rake. Любая команда rake с -g опцией будет использовать эти глобальные файлы Rake (подробнее читайте здесь):

 rake -g -T
  

Кроме того, если -g опция установлена, Rake сначала попытается загрузить RAKE_SYSTEM переменную среды files form, если она не установлена, по умолчанию будет установлено значение a home user directory/.rake/*.rake . Эти файлы будут загружены / импортированы в дополнение к одному из файлов по умолчанию, перечисленных выше.

В противном случае он загрузит первый файл по умолчанию (из приведенного выше списка) и дополнительно импортирует все файлы rake из rakelib каталога (в разделе местоположение, из которого вы запускаете rake ), ИЛИ этот каталог можно указать с помощью:

 --rakelibdir=RAKELIBDIR or -R RAKELIBDIR: Auto-import any .rake files in RAKELIBDIR. (default is 'rakelib')  
  

Комментарии:

1. rake Просматривает ли какие-либо переменные среды? Каков порядок поиска файлов rakefile? Спасибо tolitius!

2. @Avry, я добавил в ответ более подробную информацию о переменных order и ENV.