【发布时间】:2011-08-28 10:47:30
【问题描述】:
是否可以从其他 Ruby 脚本调用在 Rakefile 中定义的任务 - 而不是在 somefile.rake 中定义的任务?
我希望创建一个新的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,这有点令人恼火。
更新 5 月 20 日,欧洲中部时间下午 4:40
看了一会儿rake源代码,我发现你需要调用Rake::Application#init来初始化你新创建的rake应用程序:
rake = Rake::Application.new
rake.init
rake.load_rakefile
但是,我仍然无法调用 Rakefile 中定义的任何任务:
rake.top_level_tasks # => ["default"]
我很乐意在这件事上提供任何帮助。
【问题讨论】:
-
FWIW,该链接告诉如何运行一项任务,通过构建应用程序,脚本的行为更像
rake可执行文件。