是否可以从其他Ruby脚本中调用在Rakefile- 而不是somefile.rake- 中定义的任务?
我希望创建一个新的Rake::Application会自动加载Rakefile来自同一目录,但似乎并非如此.这是我到目前为止提出的:
$LOAD_PATH.unshift File.dirname(__FILE__)
require 'rake'
require 'pp'
rake = Rake::Application.new
rake[:hello].invoke
Run Code Online (Sandbox Code Playgroud)
执行此代码会导致以下结果:
/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>'
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
它是某种刺激性即@rakefile是nil.
中欧时间5月20日下午4:40更新
在阅读了rake源代码一段时间之后,我发现你需要调用Rake :: Application#init来初始化你新创建的rake应用程序:
rake = Rake::Application.new
rake.init
rake.load_rakefile
Run Code Online (Sandbox Code Playgroud)
但是,我仍然无法调用我的Rakefile中定义的任何任务:
rake.top_level_tasks # => ["default"]
Run Code Online (Sandbox Code Playgroud)
我很乐意感谢你对此事的任何帮助.
Vas*_*ich 18
您忘了将新内容添加rake到当前的Rake应用程序中:
$LOAD_PATH.unshift File.dirname(__FILE__)
require 'rake'
require 'pp'
rake = Rake::Application.new
Rake.application = rake
rake.init
rake.load_rakefile
rake[:hello].invoke
Run Code Online (Sandbox Code Playgroud)
要不就
$LOAD_PATH.unshift File.dirname(__FILE__)
require 'rake'
require 'pp'
Rake.application.init
Rake.application.load_rakefile
Rake.application[:hello].invoke
Run Code Online (Sandbox Code Playgroud)
Jam*_*ore 10
只需加载Rakefile:
==> foo.rb <==
require 'rubygems'
require 'rake'
load 'Rakefile'
Rake::Task[:some_task].invoke
==> Rakefile <==
task :some_task do
puts "some_task"
end
Run Code Online (Sandbox Code Playgroud)
Rake :: Application是关于命令行处理,默认rakefiles,输出等等.您可能不需要任何这些.