我正在尝试创建一个LWRP,它将调用自身内部定义的资源。我的食谱结构如下:
在机器食谱的提供者中,我有一个代码片段如下:
require 'chef/provisioning' # driver for creating machines
require '::File'
def get_environment_json
@@environment_template = JSON.parse(File::read(new_resource.template_path + "environment.json"))
return @@environment_template
end
代码只是尝试读取json文件而我正在使用File :: read。
我一直收到如下错误:
无法加载此类文件 - :: File
有谁知道如何在我的LWRP提供商中使用File :: read?
答案 0 :(得分:6)
好的,所以前两个答案都是对的。你有两个问题。
首先,您不能要求::File
,因为它已经是Ruby的一部分。这是导致错误的原因。
其次,如果你致电File.read
,你将获得Chef File
而不是红宝石。您需要使用::File.read
来使用Ruby的File类。
答案 1 :(得分:0)
require '::File'
不正确并导致LoadError。删除此行。你不需要它。 File
是Ruby核心的一部分,不需要require
d。
为了进一步说明,require
的字符串参数表示要加载的库的文件名。因此,它应该看起来像require "file"
或require "rack/utils"
。
答案 2 :(得分:0)
这是因为Chef已经有了一个文件资源。我们必须在配方中使用Ruby File类。我们使用:: File来使用Ruby File类来解决这个问题。例如:
execute 'apt-get-update' do
command 'apt-get update'
ignore_failure true
only_if { apt_installed? }
not_if { ::File.exist?('/var/lib/apt/periodic/update-success-stamp') }
end