에 registry_key 라이브러리 모듈과 방법을 이용하여 I 오류요리사 NoMethodError 레시피
NoMethodError
-------------
undefined method `registry_key' for HashOperations:Module
을 받는다.
module HashOperations
# Tried: require 'chef/mixin/shell_out'
# Tried: include Chef::Mixin::ShellOut
def self.create_reg_keys(item_hash)
item_hash.each do |item_name, item_props|
# (...) construct the item_keys array
registry_key "HKEY_LOCAL_MACHINE\\SOFTWARE\\#{item_name}" do
recursive true
values item_keys
action :create
end
end
end
def self.generate_reg_keys_for_item_key(...)
# some hash operations here
create_reg_keys(item_hash)
end
end unless defined?(HashOperations)
class Chef::Resource
# Tried: Chef::Resource.send(:include, HashOperations)
# Tried: include HashOperations
extend HashOperations
end
여기 조리법/default.rb됩니다 :
Chef::Resource.send(:include, HashOperations)
ruby_block "test" do
block do
# Tried: Chef::Recipe.send(:include, HashOperations)
items_keys.each do |item_key|
HashOperations.generate_reg_keys_for_item_key(..., item_key)
end
end
end
내가 주를 추측
이 라이브러리/hash_operations.rb의 코드의 짧은 버전입니다 문제는 요리사 리소스 인 registry_key을 모듈 내부의 메소드 내부에서 사용하려고 시도하는 것입니다. 모듈은 다시 레시피에서 호출됩니다.
나는 모듈을 사용하지 않는 경우 나 작업 버전을 가지고,하지만 난 ChefSpec와 코드를 테스트하려면 여러 기사가 (이 같은 : Stubbing library class methods in ChefSpec) 지적 I는 모듈이 필요
위에서 언급 한 링크가 정의되지 않은 한 end를 사용하는 이유가 무엇입니까? (HashOperations) 모듈 내부.
필자는 include 문을 사용해 보았습니다. 주석 또는 제안 된 첫 번째 줄에 여러 개의 StackOverflow 게시물이 제안되어 행운이 없습니다. 한 게시물은 LWRP의 사용법에 대해 논의하고 있었지만 코드가이 제조법과 엄격하게 관련되어 있으며 다른 요리 책에는 사용되지 않았기 때문에 여기서는 그렇지 않다고 생각합니다.
메모 : 나는 자체를 사용하고 있습니다.을 볼 수 있도록하려면 에 대한 오류 메시지가 표시됩니다. generate_reg_keys_for_item_key을 사용할 수 없습니다.
그래서 StackOverflow에서 제안한 것들을 포함하여 이것에 대한 해결책을 찾기 위해 많은 시간을 보냈습니다. 질문 :이 오류를 해결하는 가장 좋은 방법은 무엇이며 간단한 해결책이 있습니까? ChefSpec (나는 LWRP를 완전히 제외하지는 않습니다)로 테스트해야하며, registry_key을 수렴 작업에 표시하려면 어떻게해야합니까?
답변 해 주셔서 감사합니다. 귀하의 링크를 확인하고 ** 요리법 **의 ** 요리법 **의 ** **에 HashOperations **를 추가하고 조리법의 맨 위에 추가 했는데도 ** registry_key **에 대한 오류가 계속 나타납니다. ** HashOperations : Hodule **. 이것에 대해 다른 제안이 있습니까? – tibileo