gpt4 book ai didi

chef-infra - Chef Recipe 输入错误

转载 作者:行者123 更新时间:2023-12-01 11:49:06 24 4
gpt4 key购买 nike

我有以下节点定义:

{
"prestashop_sites" : {
"site1": { "username": "dave", "password" :"password123", "URL":"www.madeup.com" },
"site2": { "username": "dave2", "password" :"password12", "URL":"www.madeup2.com" }
},
"run_list": [
"recipe[prestashop]"
]
}

还有 Recipe :

node["prestashop_sites"].each do |site|
username site['username']
Chef::Log.debug("Found a server: #{site['username']}")
end

remote_file "/tmp/prestashop152.zip" do
source "http://www.prestashop.com/download/old/prestashop_1.5.2.0.zip"
mode "0644"
checksum "37aee9ef5388376e4377aeb240ab027e"
backup false
not_if "test -f /tmp/prestashop152.zip"
end

execute "unzip -o /tmp/prestashop152.zip -d #{node[:prestashop][:location]}" do
not_if "test -f /var/www/#{node[:prestashop][:user]}/prestashop/index.php"
end

所以我的目标是安装几个 prestashop 实例(在我完成脚本之后)。

但我卡住了:

10:  node["prestashop_sites"].each do |site| 
11>> Chef::Log.debug("Found a server: #{site['username']}")
12: end

Mon, 12 Nov 2012 21:26:14 +0100] DEBUG: Re-raising exception:
TypeError - can't convert String into Integer

知道为什么吗?!

最佳答案

您有一个散列作为 *node["prestashop_sites"]* 的子元素,而不是数组。所以你必须为 each 方法提供 2 个变量。 1 是键,另一个是值:

10>>!  node["prestashop_sites"].each do |key, site| 
11: Chef::Log.debug("Found a server: name: #{key}, #{site['username']}")
12: end

将为第一个站点打印“找到服务器:名称:site1,dave”

您遇到的“奇怪”错误:TypeError - 无法将 String 转换为 Integer,是因为当您仅向 each 方法提供 1 个变量时,ruby 会尝试将键和值都放入那个变量。这结束了分配的 [key, value] 的值,在您的情况下意味着

网站 == ["site", { "username": "dave", "password":"password123", "URL":"www.madeup.com"}]

实际上是一个数组,并且您尝试访问具有字符串索引而非整数的数组元素。

关于chef-infra - Chef Recipe 输入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351036/

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