Использование rake import (вызов других rakefiles) - PullRequest
6 голосов
/ 22 декабря 2010

Вот мой основной файл рейка

subrake = 'subrake'

task :init => [subrake] do
  #call subrake.build
end

import subrake

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

Ответы [ 2 ]

7 голосов
/ 29 апреля 2011

Полагаю, я опоздал с ответом, но у меня был тот же вопрос всего несколько минут назад.Таким образом, решение может быть полезным для кого-то.

Rakefile.rb

subrake = 'subrake'

task :default => :init

task :init => ["#{subrake}:init"] do
  Rake::Task["#{subrake}:build"].invoke
end

require "#{Dir.pwd}/#{subrake}"

subrake.rb

namespace :subrake do

  desc "Init"
  task :init do
    puts 'Init called'
  end

  desc "Build"
  task :build do
    puts 'Build called'
  end

end

Я думаю, код описывает себя просто хорошо, но я хочу остановиться на одном моменте.Когда вы звоните require , вы должны предоставить для subrake file полный путь (как в моем примере) или '. \ Subrake' (если он находится в рабочем каталоге)

5 голосов
/ 02 июля 2011

Если у вас есть несколько файлов вспомогательных граблей, вы можете сделать что-то вроде

Dir.glob('**/*.rake').each { |r| import r}

task :init => ["subrake:init"] 

и вы можете иметь файлы sub.rake, которые выглядят так:

namespace :subrake do
  desc "Init"
  task :init do
    puts 'Init called'
  end
end

и другой файл foo.rake

namespace :foorake do
  desc "Init"
  task :init do
    puts 'Init called'
  end
end

и вы можете вызвать foorake: init из оболочки, например, так:

#rake foorake:init

или добавьте его к основной задаче, например

task :init => ["subrake:init", "fforake:init"]
...