如何从其他Ruby脚本中调用在标准Rakefile中定义的Rake任务?

发布时间:2019-10-09 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了如何从其他Ruby脚本中调用在标准Rakefile中定义的Rake任务?脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
可以从其他 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为零.

更新5月20日,下午4:40 CET

在读取耙子源代码一段时间后,我发现您需要调用Rake :: Application#init来初始化新创建的耙机应用程序:

rake = Rake::Application.new
rake.init
rake.load_rakefile

但是,我仍然无法调用我的Rakefile中定义的任务:

rake.top_level_tasks # => ["default"]

我很乐意就此事提供任何帮助.

解决方法

你忘了添加新的耙子到当前的耙子应用程序:
$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

要不就

$LOAD_PATH.unshift File.dirname(__FILE__)
require 'rake'
require 'pp'

Rake.application.init
Rake.application.load_rakefile

Rake.application[:hello].invoke

总结

以上是脚本之家为你收集整理的如何从其他Ruby脚本中调用在标准Rakefile中定义的Rake任务?全部内容,希望文章能够帮你解决如何从其他Ruby脚本中调用在标准Rakefile中定义的Rake任务?所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。

快乐,其实很简单!比如有我~

关注我升职加薪

标签: