是否可以從其他Ruby腳本中調用在Rakefile
中定義的任務 - 而不是在somefile.rake
中?如何從其他Ruby腳本調用標準Rakefile中定義的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 CET
閱讀耙源代碼,一小會兒後,我想通了,你需要調用的Rake ::應用#的init,以初始化新創建耙應用:
rake = Rake::Application.new
rake.init
rake.load_rakefile
但是,我還是不能調用我的Rake文件中定義的任何任務:
rake.top_level_tasks # => ["default"]
我很高興感謝任何幫助。
查看http://stackoverflow.com/questions/3530/how-do-i-rake-tasks-within-a-ruby-script too – 2011-09-19 09:13:27
FWIW,該鏈接通過構建應用程序告訴如何運行一個任務,該腳本將更像「rake」可執行文件。 – Smar 2015-02-02 12:25:42