2015-01-21 41 views
0

我设计了ruby中的代码,它通过电子表格和代码将我的xls部分转换为json。我需要将这个json上传到厨师服务器上的数据包中。我使用ruby代码的刀子命令并运行它。该JSON文件上传到我的本地厨师回购正确的,但对于转移到厨师服务器我收到此错误:从Ruby上传数据包时出错

ERROR: Chef::Exceptions::ValidationFailed: Data Bag Items must contain a Hash or Mash! 

我已经验证了JSON,ID相匹配的文件名,并尝试使用[]括号在开始和结束,但不起作用。这是我的JSON的开始:

{ “ID”: “default_1”, “Sr.No”: “1”,...}

我的Ruby代码要领如下所示:

require 'spreadsheet' 
book = Spreadsheet.open('BI.xls') 
sheet1 = book.worksheet('Sheet1') 
. 
. 
. 
cmd1 = "cd #{current_dir}/chef-repo" 
cmd2 = "knife data_bag create TestDB" #tried knife data bag too 
cmd4 = "knife data_bag from file TestDB default_1.json" #tried knife data bag too 

upload = %x[#{cmd1} && #{cmd2} && #{cmd4} ] 
puts "#{upload}" 

命令knife node list正确显示节点。我是厨师和红宝石新手,搜索并尝试了很多东西,但没有工作。

+0

此外,如果我从厨师回购中运行完全相同的命令,它可以正常工作并将json上传到数据包。 – user3264632 2015-01-21 09:35:09

+0

可以肯定,你的json文件路径是'[/] chef-repo/data_bags/TestDB/default_1.json'吧? – Tensibai 2015-01-21 10:27:22

+0

是的,代码文档和.xls存储在厨师回购 – user3264632 2015-01-22 05:31:11

回答

0

令人惊讶地得到解决!我将所有文档存储在chef-repo中,并将一个文件分成两个文件,第一个将.xls转换为json,另一个执行knife命令。我现在可以像预期的那样从厨师回购和工作中运行ruby脚本。唷!