blok

2012-05-13 25 views
6

en biz iki kaynak var diyelim yöntemleri (şef kaynaklarını) görmüyorum. Bununla birlikte, tarifte bir proc tanımlarsam, owner, group için NoMethodError alırsınız. Bu neden olur? Sözcük kapsamı farklı değil, değil mi? Sonuç olarak self.instance_eval &common_cfg kullanmam gerekiyor. Çünkü şef (yansıma dolu) uygulanmaktadır nasılblok

common_cfg = Proc.new { 
    owner 'root' 
    group 'root' 
} 

template 'template1' do 
    common_cfg.call 
end 

template 'template2' do 
    common_cfg.call 
end 
+0

bunu bir küresel ('$ common_cfg') yaparsanız hata ortaya çıkıyor mu nedir? –

+0

Proc değişkeni iyi değerlendirilir, çünkü NoMethodError proc (sahip, grup vb.) Bağlamında gerçekleşir – m33lky

+0

Oh; gotcha - yorumu silecek. –

cevap

2

bunu korumak için bir kütüphane ya da yakut blok kaynak koymak gerekir. Bir ruby ​​blok kaynağının çalışacağını düşünüyorum çünkü kapsam dışında olacak.

http://wiki.opscode.com/display/chef/Libraries

genellikle bu nedenle deyim

["file_one","file_two"].each do |file| 
    template file do 
    owner "root" 
    group "root" 
    end 
end 
+0

İkincisi bağlantı bozuk. – Eye

+0

@Eye artık alakalı olmadığı için kaldırıldı – EnabrenTane