注意:编辑问题以反映问题。
我想与knife-api
rubygem合作。附上我的代码片段
require 'chef'
require 'chef/knife'
require 'knife/api'
module X
module Y
module Z
include Chef::Knife::API
def self.foo
resp = knife_capture :search, ['*:*']
puts resp
end
end
end
end
调用X::Y::Z.foo
时,返回
gems/knife-api-0.1.7/lib/knife/api.rb:41:in `ensure in knife_capture': undefined local variable or method `revert_io_channels' for X::Y::Z (NameError)
似乎他在Chef::Knife
内无法访问范围函数(knife-api
中的X::Y::Z.foo
)。
我该怎么做才能做到这一点?
答案 0 :(得分:0)
此gem是另一个不再维护的项目的分支。查看gem代码,通过对原始代码进行一些错误的重构,似乎有一些问题被引入最新版本(0.1.7
)。那个版本是在一年前发布的,自那以后它还没有任何提交。回购也不接受发票,也没有测试。如果你必须使用这个gem,我会尝试一个悲观的约束gem 'knife-api', '< 0.1.7'
,看看是否有效。但是,完全跳过它可能是一个更好的主意。我试图解决问题并提交PR。您也可以尝试从我的分叉回购https://github.com/msimonborg/knife-api
答案 1 :(得分:0)
在完整的非答案中,请勿使用knife-api
gem。它不应该存在。如果您想从Ruby代码访问Chef API数据,那么使用的正确gem是chef-api
(我知道,我们是真正具有名称的创意)。如果你想做一些非常小的事情,请查看knife exec
命令,该命令只公开原始Chef对象API(不像chef-api
那样精致,但内置)。