HASH中的RUBY散列;没有将字符串隐式转换为整数(TypeError)

HASH中的RUBY散列;没有将字符串隐式转换为整数(TypeError),ruby,chef-infra,erb,Ruby,Chef Infra,Erb,我正在尝试解决一个类型错误,但我不确定错误在哪里。我假设它会在我的client.rb文件中。我试图根据位置A还是位置B,用正确的ip地址填写ERB文件。如果它位于位置A,则取第一个ip地址并填写它,然后在另一行上对位置A的第二个ip地址执行相同操作 数据包/JSON { "id": "sources", "A": {"primary": "127.0.0.1", "secondary": "127.0.0.2"}, "B": {"primary": "127.0.0.1", "s

我正在尝试解决一个类型错误,但我不确定错误在哪里。我假设它会在我的client.rb文件中。我试图根据位置A还是位置B,用正确的ip地址填写ERB文件。如果它位于位置A,则取第一个ip地址并填写它,然后在另一行上对位置A的第二个ip地址执行相同操作

数据包/JSON

{
  "id": "sources",
   "A": {"primary": "127.0.0.1", "secondary": "127.0.0.2"},
   "B": {"primary": "127.0.0.1", "secondary": "127.0.0.2"}
}
ERB文件

:server <%=sources["primary"]%>
:server <%=sources["secondary"]%>

厨师的
search
方法总是返回一个匹配数组。因此,您的
data\u-bag
变量可能包含一个带有单个元素的数组:您想要的散列

您可以使用以下方法对此进行规范化:

data_bags = search(:win_sources,'id:sources')
if data_bags.size == 1
  data_bag = data_bags.first
else
  raise 'More or less than one sources data bag found!'
end

厨师的
search
方法总是返回一个匹配数组。因此,您的
data\u-bag
变量可能包含一个带有单个元素的数组:您想要的散列

您可以使用以下方法对此进行规范化:

data_bags = search(:win_sources,'id:sources')
if data_bags.size == 1
  data_bag = data_bags.first
else
  raise 'More or less than one sources data bag found!'
end

您的代码中有一个明显的错误。您的哈希没有
键。它有一个
sources
值。所以
毫无意义。@EddeAlmeida这是在转移注意力。sources变量设置为
数据包[“B”]
,数据包包含在数据包中。哦,我看到@HolgerJust了。有时候,我说话的速度太快了!谢谢。不是答案,但对于您的erb,您需要添加
=
符号,否则即使它起作用,您也看不到任何东西。e、 g.
:服务器
。简单地说,
代码中有一个明显的错误。您的哈希没有
键。它有一个
sources
值。所以
毫无意义。@EddeAlmeida这是在转移注意力。sources变量设置为
数据包[“B”]
,数据包包含在数据包中。哦,我看到@HolgerJust了。有时候,我说话的速度太快了!谢谢。不是答案,但对于您的erb,您需要添加
=
符号,否则即使它起作用,您也看不到任何东西。e、 g.
:服务器
。简单来说