2011-03-07 8 views
43
Gem.bin_path('cucumber', 'cucumber') 

द्विआधारी/निष्पादन के पथ वापसी करेंगे कैसे ढूंढें। ऐसा लगता है कि लाइब्रेरी पथ को वापस करने के लिए ऐसा कोई फ़ंक्शन नहीं है। इस मामले में कौन सा, आदर्श, वापसी होगी:पथ एक रूबी रत्न पर स्थापित किया गया है (अर्थात Gem.lib_path सी.एफ़ Gem.bin_path)

/home/hedge/.rvm/gems/[email protected]/gems/cucumber-0.10.0/lib 

मैं कुछ चूक या वहाँ एक सरल/एक विधि जिस तरह से यह जानकारी प्राप्त करने के लिए है है?

अपडेटेडः कोई सीएलआई या गैर-स्टडीलिब सुझाव कृपया।

उत्तर

73

जाँच की जवाब के साथ समस्या यह है कि आप "की आवश्यकता होती है" चाहिए rubygem या इसे जीता है काम नहीं करता अक्सर यह अवांछनीय है क्योंकि यदि आप एक निष्पादन योग्य मणि के साथ काम कर रहे हैं, तो आप इसे "आवश्यकता" नहीं चाहते हैं या आपको चेतावनियों का एक गुच्छा मिलेगा।

spec = Gem::Specification.find_by_name("cucumber") 
gem_root = spec.gem_dir 
gem_lib = gem_root + "/lib" 

तुम सच में तकनीकी प्राप्त करना चाहते हैं, वहाँ सिर्फ एक lib निर्देशिका नहीं है:

यह निष्पादनयोग्य और libs के लिए एक सार्वभौमिक समाधान है। Gemspec में खोजने के लिए सभी निर्देशिकाओं की "require_paths" सरणी है ($ LOAD_PATH में जोड़ा गया)। इसलिए, यदि आप require_paths की एक सरणी चाहते हैं, यह का उपयोग करें:

gem_lib = gem_root + "/" + spec.require_paths[0] 

बंडलर के लिए कोई ज़रूरत नहीं।

4

bundle show cucumber का उपयोग करने का प्रयास करें।

कौन सा, करता है की तरह कुछ बंडलर के स्रोत को देख से:, बंडलर का उपयोग कर

spec = Bundler.load.specs.find{|s| s.name == name } 
spec.full_gem_path 

आप हैं है ना?

+0

बिंडल टू बिंडलर, मैंने इसे बड़े पैमाने पर पैच किया है, इसलिए पता करें कि जब आप इसे टूर कोड में उपयोग करना शुरू करते हैं तो क्या होता है। फिर भी, अकेले गिट मुद्दों को सूचीबद्ध किया गया है - लेकिन इसे नजर रखने के लिए दिलचस्प :) – Hedgehog

15

मुझे यकीन नहीं है कि आप ऐसा क्यों कर रहे हैं, लेकिन यदि आप कमांड लाइन पर हैं, तो gem env का उपयोग करें।

+0

क्षमा करें, स्पष्ट होना चाहिए - कोई क्ली, बस एपीआई। – Hedgehog

+0

सादगी के लिए धन्यवाद, ठीक वही जो मैं खोज रहा था। –

22

के बाद मणि की आवश्यकता के साथ लोड किया गया है, तो आप lib पथ Gem.loaded_specs का उपयोग कर के रूप में निम्नानुसार हैं:

require 'rubygems' 
require 'cucumber' 
gem_root = Gem.loaded_specs['cucumber'].full_gem_path 
gem_lib = File.join(gem_root, 'lib') 
+0

यह उदाहरण के लिए rubygems 1.3.6 के लिए पूरी तरह से काम करता है, (संस्करण जो मैक पर मानक के रूप में आता है), जबकि जेम :: विशिष्टता। Find_by_name ("ककड़ी") wont। चीयर्स गाय, मुझे परेशानी का एक गुच्छा बचाया! –

संबंधित मुद्दे