Можно ли вызвать задачу, которая определена в Rakefile
- не в somefile.rake
- из другого Ruby script?
Я надеялся, что создание нового Rake::Application
будет автоматически загружать Rakefile
из того же каталога, но похоже, что это не так. Вот что я придумал до сих пор:
$LOAD_PATH.unshift File.dirname(__FILE__)
require 'rake'
require 'pp'
rake = Rake::Application.new
rake[:hello].invoke
Выполнение этого кода приводит к следующему:
/opt/ruby/1.9.2-p180/lib/ruby/1.9.1/rake.rb:1720:in `[]': Don't know how to build task 'hello' (RuntimeError)
from script.rb:7:in `<main>'
pp rake
дает следующее:
#<Rake::Application:0x00000101118da0
@default_loader=#<Rake::DefaultLoader:0x00000101118b20>,
@imported=[],
@last_description=nil,
@loaders=
{".rb"=>#<Rake::DefaultLoader:0x00000101118a80>,
".rf"=>#<Rake::DefaultLoader:0x000001011189b8>,
".rake"=>#<Rake::DefaultLoader:0x00000101118800>},
@name="rake",
@original_dir=
"/Users/t6d/Projects/Sandbox/Ruby/rake-from-ruby-script",
@pending_imports=[],
@rakefile=nil,
@rakefiles=["rakefile", "Rakefile", "rakefile.rb", "Rakefile.rb"],
@rules=[],
@scope=[],
@tasks={},
@top_level_tasks=[],
@tty_output=false>
Как-то раздражает, что @rakefile
есть nil
.
Обновление 20 мая, 16:40 CET
Прочитав исходный код rake на некоторое время, я понял, что вам нужно вызвать Rake:: Application # init, чтобы инициализировать недавно созданное приложение rake:
rake = Rake::Application.new
rake.init
rake.load_rakefile
Однако я все еще не могу вызывать любые задачи, определенные в моем Rakefile:
rake.top_level_tasks # => ["default"]
Я с удовольствием позабочусь о любой помощи в этом вопросе.