2012-11-12 134 views
3

我有以下節點定義:在廚師的食譜類錯誤

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

和配方:

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 

任何想法,爲什麼?!

回答

5

你有一個散列作爲* node [「prestashop_sites」] *的子元素,而不是數組。所以你必須提供2個變量每個方法。 1是關鍵,另一個用於值:

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

將打印「找到一個服務器:名稱:site1的,戴夫」的第一個站點。

的「奇怪」的錯誤,您可以:類型錯誤 - 不能轉換成字符串整數,是因爲當你僅提供1個變量的每個方法,紅寶石試圖把兩個鍵和值到該變量。結束[key,value]賦值的值,在你的情況下意味着

site == [「site」,{「username」:「dave」,「password」:「password123」,「 URL「:」www.madeup.com「}]

實際上是一個數組,並且您嘗試訪問數組元素而不使用整數字符串索引。

+0

該死的;那個笨蛋。 :) 非常感謝 ! – Disco