Ruby 如何在chef中使用另一本食谱中的库方法?

Ruby 如何在chef中使用另一本食谱中的库方法?,ruby,chef-infra,Ruby,Chef Infra,我有一个例子,我必须使用另一本烹饪书中的库函数,但我总是发现有一个错误:NoMethodError:undefined method'func' 我尝试了什么: cookbook_1/libraries/lib1.rb: 模块名称空间_1 模块名称空间2 def func(变量) 某物 结束 结束 结束 厨师长::菜谱。包括(名称空间_1::名称空间_2) cookbook_2/metadata.rb: 。 . 取决于“食谱1” cookbook_2/resource/some_resour

我有一个例子,我必须使用另一本烹饪书中的库函数,但我总是发现
有一个错误:NoMethodError:undefined method'func'

我尝试了什么:

cookbook_1/libraries/lib1.rb:

模块名称空间_1
模块名称空间2
def func(变量)
某物
结束
结束
结束
厨师长::菜谱。包括(名称空间_1::名称空间_2)
cookbook_2/metadata.rb:

。
.
取决于“食谱1”
cookbook_2/resource/some_resource.rb:

#试试1
操作:安装程序
a=func('abc')
结束
#试试2
扩展名称空间_1::名称空间_2
操作:安装程序
a=func('abc')
结束
#试试3
::Chef::Recipe.send(:include,名称空间_1::名称空间_2)
操作:安装程序
a=func('abc')
结束
#试试4
操作:安装程序
a=名称空间_1::名称空间_2::func('abc')
结束
#试试5
厨师长::菜谱。包括(名称空间_1::名称空间_2)
操作:安装程序
a=名称空间_1::名称空间_2::func('abc')
结束
我得到了相同的错误,即
NoMethodError:undefined方法'func'

如何解决这个问题?

对于在库中编写的Ruby方法或自定义资源中可以在自定义资源操作中使用的自定义资源,我们应该使用
action\u类
block

引述自:

使用
action\u类
块使方法可用于自定义资源中的操作

因此,在您的
cookbook1
中,除了拥有库之外,您还应该拥有一个带有
action\u类的自定义资源。我在你的基础上举我自己的例子

cookbook1
libraries/lib1.rb

#只返回接收到的参数的自定义函数
模块名称空间1
模块名称空间2
def自定义函数(arg1)
arg1
结束
结束
结束
cookbook1
resources/some\u resource.rb

property:msg,String,name\u属性:true
#这是确保自定义操作可以使用函数所必需的
课堂行动
包括名称空间1::名称空间2
结束
操作:安装程序
a=自定义函数(new\u resource.msg)
记录一件事
级别:信息
结束
结束
请注意,我在与库相同的食谱中创建了自定义资源。现在,可以在
cookbook2
中使用此自定义资源:

cookbook2
metadata.rb

依赖于“cookbook1”
cookbook2
recipes/default.rb

cookbook1\u一些资源“测试自定义函数”

自定义操作
:设置
不应位于
元数据.rb
中。还是在自定义资源中?更正了,它是resource@seshadri\u c