gpt4 book ai didi

ruby - block 看不到方法( Chef 资源)

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

假设我们有两个资源:

template 'template1' do
owner 'root'
group 'root'
end

template 'template2' do
owner 'root'
group 'root'
end

我想在资源中重用代码。但是,如果我在配方中定义了一个过程,您会得到 ownergroup 等的 NoMethodError。为什么会这样?词法范围没有什么不同,是吗?因此,我必须使用 self.instance_eval &common_cfg

common_cfg = Proc.new {
owner 'root'
group 'root'
}

template 'template1' do
common_cfg.call
end

template 'template2' do
common_cfg.call
end

最佳答案

由于 chef 的实现方式(有很多反射),您需要将其放入库或 ruby​​ block 资源中以保护它。我认为 ruby​​ block 资源会起作用,因为它超出了范围。

http://wiki.opscode.com/display/chef/Libraries

通常为此成语是

["file_one","file_two"].each do |file|
template file do
owner "root"
group "root"
end
end

关于ruby - block 看不到方法( Chef 资源),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10574959/

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