Использование импорта rake (вызов других файлов rake)

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

subrake = 'subrake'

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

import subrake

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


person Drew    schedule 22.12.2010    source источник


Ответы (2)


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

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 полный путь (как в моем примере) или '.\subrake' (если он находится в рабочем каталоге )

person ie.    schedule 29.04.2011

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

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

и вы можете вызвать forake:init из оболочки вот так

#rake foorake:init

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

task :init => ["subrake:init", "fforake:init"]
person molicule    schedule 02.07.2011
comment
Мне нравится этот ответ, потому что он ближе к тому, как работают Minitest и RSpec, а также к поиску определенных типов файлов. - person FilBot3; 20.10.2016