gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:37:36 25 4
gpt4 key购买 nike

是否可以从其他 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>

@rakefilenil 有点让人恼火。

欧洲中部时间 5 月 20 日下午 4:40 更新

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

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

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

rake.top_level_tasks # => ["default"]

我很乐意在这方面提供任何帮助。

最佳答案

您忘记将新的 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

或者只是

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

Rake.application.init
Rake.application.load_rakefile

Rake.application[:hello].invoke

关于ruby - 如何从其他 Ruby 脚本调用标准 Rakefile 中定义的 Rake 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6051773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com