2014-02-20 2 views
4

저는 요리사가 간단한 요리 책을 만들려고합니다. 도서관을 학습 과정으로 사용하고 있습니다. 나는 조리법이를 호출 할 때요리법에서 라이브러리의 클래스 메소드 사용

module ABC 
    class YumD 
    def self.pack (*count) 
     for i in 0...count.length 
     yum_packag "#{count[i]}" do 
      action :nothing 
     end.run_action :install 
     end 
    end 
    end 
end 

나는

undefined method `yum_package' for ABC::YumD:Class 

답변

4

당신은 도서관 내부의 요리사 레시피 DSL에 대한 액세스 권한이없는라는 컴파일 오류가 발생합니다. DSL 메소드는 실제 Ruby 클래스의 바로 가기입니다.

template '/etc/foo.txt' do 
    source 'foo.erb' 
end 

사실 "컴파일"(읽기 : "해석")에 :

template = Chef::Resource::Template.new('/etc/foo.txt') 
template.source('foo.erb') 
template.run_action(:create) 

따라서, 귀하의 경우, 당신은 YumPackage를 사용하려면 : 예를 들어

module ABC 
    class YumD 
    def self.pack(*count) 
     for i in 0...count.length 
     package = Chef::Resource::YumPackage.new("#{count[i]}") 
     package.run_action(:install) 
     end 
    end 
    end 
end 
+0

감사합니다. 그러나'package.run_action (: install)에 대한 오류가 발생합니다. 내가 얻는 오류는 '정의되지 않은 메서드'events for nil : NilClass '입니다. package.action은 정상적으로 작동합니다. 하지만 패키지에 의존하는 chef_gem을 사용하여 보석을 다운로드 할 때 컴파일 할 때 패키지를 설치해야합니다. – Sbal

+0

파티가 늦어 지지만, 이것이 작동하지 않는 이유는 생성자에'run_context'가 누락되어 있다고 생각하기 때문입니다. 그러나 그것은 도서관에서 사용할 수없는 것 같습니다. –

+0

내가 찾고 있던 답변은 http://stackoverflow.com/questions/20835697/how-to-require-my-library-in-chef-ruby-block의 레서피와 답변에서 클래스 메서드를 사용하는 방법이었습니다. 나를 도와 주었다. 'def self. <> '으로 메소드를 정의한 다음'AppHelper. <> – saranicole

2

오류를 피해야하는 sethvargo의 대답을 개선하려면 run_context을 생성자 호출에 추가 해보십시오.

module ABC 
    class YumD 
    def self.pack(*count) 
     for i in 0...count.length 
     package = Chef::Resource::YumPackage.new("#{count[i]}", run_context) 
     package.run_action(:install) 
     end 
    end 
    end 
end 
+0

으로 레시피에서 참조 할 수 있습니다.이 질문에 대한 답은 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남기십시오. 자신의 게시물에 언제나 댓글을 달 수 있으며 충분한 [평판] (http://stackoverflow.com/help/whats-reputation)을 갖게되면 [모든 게시물에 댓글을 달 수] 있어야합니다 (http://stackoverflow.com/help/privileges/comment). – jruizaranguren

+0

그렇기 때문에 Sbal의 원래 게시물에 대해서는 언급하지 않았습니다. 그들을 비난해라, 나. 그리고 제가 질문에 대답하지 않는다면, 둘 다 sethvargo입니다, 그렇지만 나는 그의 게시물에 대해 불평하는 것을 보지 못합니다. –

+0

당신이 뭔가있는 것 같아요. 그러나 그것을 시도 할 때,'run_context'는 정의되지 않았습니다. –

관련 문제