2011-08-17 25 views
5

परिदृश्य:मैं रूबी लाइब्रेरी पर निर्भरता कैसे स्थापित कर सकता हूं जो शेफ लोड व्यंजनों के समय मौजूद नहीं है?

  • Recipe1: डाउनलोड अभिलेखागार, उन्हें निकालता है। एक सीएलआई उपलब्ध कराता है जो रूबी लाइब्रेरी को भी परिभाषित करता है।
  • पकाने की विधि 2: उपरोक्त पुस्तकालय से रूबी एपीआई का लाभ उठाता है।

recipe1/व्यंजनों/default.rb में:

.. do work 
node[:recipe1][:filePath] = ".." #path to file 

recipe2/व्यंजनों/default.rb में:

require node[:recipe1][:filePath]/lib/Library 
.. do work 

हालांकि, जब व्यंजनों लोड हो रहा है, बावर्ची की घोषणा की:

[Wed, 17 Aug 2011 19:32:23 +0800] DEBUG: Loading cookbook apache2's definitions from /var/chef/cookbooks/apache2/definitions/web_app.rb 
[Wed, 17 Aug 2011 19:32:23 +0800] DEBUG: Loading cookbook apache2's definitions from /var/chef/cookbooks/apache2/definitions/apache_module.rb 
[Wed, 17 Aug 2011 19:32:23 +0800] DEBUG: Loading Recipe Recipe1 via include_recipe 
[Wed, 17 Aug 2011 19:32:23 +0800] DEBUG: Found recipe default in cookbook Recipe1 
[Wed, 17 Aug 2011 19:32:23 +0800] ERROR: Running exception handlers 
[Wed, 17 Aug 2011 19:32:23 +0800] ERROR: Exception handlers complete 
[Wed, 17 Aug 2011 19:32:23 +0800] DEBUG: Re-raising exception: LoadError - no such file to load -- /path/to/library/Library 
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require' 
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require' 
/var/chef/cookbooks/hsltcli/recipes/default.rb:63:in `from_file' 
/usr/lib64/ruby/gems/1.8/gems/chef-0.10.4/bin/../lib/chef/cookbook_version.rb:578:in `load_recipe' 
/usr/lib64/ruby/gems/1.8/gems/chef-0.10.4/bin/../lib/chef/mixin/language_include_recipe.rb:40:in `include_recipe' 
/usr/lib64/ruby/gems/1.8/gems/chef-0.10.4/bin/../lib/chef/mixin/language_include_recipe.rb:27:in `each' 
/usr/lib64/ruby/gems/1.8/gems/chef-0.10.4/bin/../lib/chef/mixin/language_include_recipe.rb:27:in `include_recipe' 

सभी व्यंजनों के बाद मैं रूबी लाइब्रेरी को कैसे घोषित/सक्षम कर सकता हूं दौड़ने की रस्सी?

उत्तर

4

एक जेम पैकेज का उपयोग करके, आप संसाधन पर run_action() विधि को कॉल करते हैं, इसलिए यह संकलन समय के दौरान होता है, और सुनिश्चित करें कि जेम पथ साफ़ किए गए हैं।

r = gem_package "dynect_rest" do 
    action :nothing 
end 
r.run_action(:install) 
require 'rubygems' 
Gem.clear_paths 

या, थोड़ा और अधिक कॉम्पैक्ट: उदाहरण के लिए:

gem_package "dynect_rest" do 
    action :nothing 
end.run_action(:install) 
require 'rubygems' 
Gem.clear_paths 

(require 'rubygems' शायद नहीं अत्यंत आवश्यक होता है, क्योंकि यह पहले से ही बावर्ची द्वारा लोड किया जाना चाहिए है, लेकिन हम सुनिश्चित करना चाहते हैं)