NoMethodError -------------- nil:NilClass 的未定义方法“[]”
NoMethodError ------------- undefined method `[]' for nil:NilClass
cache_path = Chef::Config[:file_cache_path]
puts "=========================="
test1 = ::File.join("#{cache_path}\#{node['ms_redistributable_2017_64']['windows_pkg']}")
puts test1
reboot 'restart_server' do
action :nothing
reason 'Reboot is necessary!'
end
remote_file ::File.join("#{cache_path}\#{rd_exe}") do
source ::File.join("#{node['test-citrix-agents']['windows_source']}/#{node['ms_redistributable_2017_64']['windows_pkg']}")
headers ({"username"=>"artifactory_username", "password"=>"artifactory_api_key"})
checksum "#{node['ms_redistributable_2017_64']['checksum']}"
action :create_if_missing
not_if { ::File.exists?(::File.join("#{cache_path}\#{node['ms_redistributable_2017_64']['windows_pkg']}") }
end
几天来一直在编译!不知道这有什么问题。请救救我
不确定使用 node.default
为变量赋值是否有效。这通常在我们想要为配方中的节点变量设置值时使用。
示例:
node.default['my_cookbook']['var'] = 'somevalue'
而当你想将节点变量的值赋给另一个变量时:
dload_checksum = node['ms_redistributable_2017_64']['checksum']
rd_path = "C:\agents\#{node['ms_redistributable_2017_64']['windows_pkg']}"
dload_source = "#{node['test-citrix-agents']['windows_source']}/#{node['ms_redistributable_2017_64']['windows_pkg']}"
此外,在您的 remote_file
资源中,您可以使用上面定义的变量:
checksum dload_checksum
not_if { ::File.exists?(rd_path) }
更新:
除了堆栈跟踪之外,您能否使用 运行 期间显示的 Cookbook Trace
和 Relevant File Content:
更新问题?
类似于:
Cookbook Trace: (most recent call first)
----------------------------------------
C:/Chef/cache/cookbooks/cookbook1/recipes/default.rb:28:in `from_file'
Relevant File Content:
----------------------
C:/Chef/cache/cookbooks/cookbook1/recipes/default.rb:
26: end
27:
28>> node['cookbook1']['var'].each do |var|
29: file "c:/Users/Public/#{var}" do
问题终于解决了
- 使用 Ruby 块来识别 nil class - 在这种情况下,存在从不同的食谱接收秘密的依赖性,看起来它正在生成一个空的 class 直到它通过仅添加那些必要的食谱来纠正
- headers( "Authorization"=>"Basic #{ Base64.encode64("#{username}:#{password}").gsub("\n", "") }" )
Headers 用于解决问题 -> 使用硬编码用户 ID 和密码进行测试
- kitchen yml 文件是主要因素,名称space 设置有很大差异。对于其中一个额外的行项目 space 尽管进行了所有上述更正
仍导致 nomethod 错误
cache_path = Chef::Config[:file_cache_path]
puts "=========================="
test1 = ::File.join("#{cache_path}\#{node['ms_redistributable_2017_64']['windows_pkg']}")
puts test1
reboot 'restart_server' do
action :nothing
reason 'Reboot is necessary!'
end
remote_file ::File.join("#{cache_path}\#{rd_exe}") do
source ::File.join("#{node['test-citrix-agents']['windows_source']}/#{node['ms_redistributable_2017_64']['windows_pkg']}")
headers ({"username"=>"artifactory_username", "password"=>"artifactory_api_key"})
checksum "#{node['ms_redistributable_2017_64']['checksum']}"
action :create_if_missing
not_if { ::File.exists?(::File.join("#{cache_path}\#{node['ms_redistributable_2017_64']['windows_pkg']}") }
end
几天来一直在编译!不知道这有什么问题。请救救我
不确定使用 node.default
为变量赋值是否有效。这通常在我们想要为配方中的节点变量设置值时使用。
示例:
node.default['my_cookbook']['var'] = 'somevalue'
而当你想将节点变量的值赋给另一个变量时:
dload_checksum = node['ms_redistributable_2017_64']['checksum']
rd_path = "C:\agents\#{node['ms_redistributable_2017_64']['windows_pkg']}"
dload_source = "#{node['test-citrix-agents']['windows_source']}/#{node['ms_redistributable_2017_64']['windows_pkg']}"
此外,在您的 remote_file
资源中,您可以使用上面定义的变量:
checksum dload_checksum
not_if { ::File.exists?(rd_path) }
更新:
除了堆栈跟踪之外,您能否使用 运行 期间显示的 Cookbook Trace
和 Relevant File Content:
更新问题?
类似于:
Cookbook Trace: (most recent call first)
----------------------------------------
C:/Chef/cache/cookbooks/cookbook1/recipes/default.rb:28:in `from_file'
Relevant File Content:
----------------------
C:/Chef/cache/cookbooks/cookbook1/recipes/default.rb:
26: end
27:
28>> node['cookbook1']['var'].each do |var|
29: file "c:/Users/Public/#{var}" do
问题终于解决了
- 使用 Ruby 块来识别 nil class - 在这种情况下,存在从不同的食谱接收秘密的依赖性,看起来它正在生成一个空的 class 直到它通过仅添加那些必要的食谱来纠正
- headers( "Authorization"=>"Basic #{ Base64.encode64("#{username}:#{password}").gsub("\n", "") }" ) Headers 用于解决问题 -> 使用硬编码用户 ID 和密码进行测试
- kitchen yml 文件是主要因素,名称space 设置有很大差异。对于其中一个额外的行项目 space 尽管进行了所有上述更正 仍导致 nomethod 错误