2012-05-03 73 views
16

स्पष्टीकरण के लिए, मैं अपने रूबी संस्करणों को प्रबंधित करने के लिए rbenv का उपयोग कर रहा हूं। मैं इस धारणा के तहत था कि द्विआधारी को उनके संबंधित रूबी संस्करण निर्देशिका में shims के रूप में प्रबंधित किया जाता है।मैं rbenv का उपयोग कर रहा हूं, तो मेरे सिस्टम पर दो जेम पथ क्यों हैं? (ओएस एक्स शेर)

यहाँ अपने सिस्टम से पता चलता है जब मैं मणि पर्यावरण (मैं अप्रासंगिक भागों को छोड़कर कर रहा हूँ) चलाएँ:

- GEM PATHS: 
    - /Volumes/Data/nathan/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1 
    - /Volumes/Data/nathan/.gem/ruby/1.9.1 

किसी भी कारण दो स्थानों रखने के लिए? जिज्ञासु मन जानना चाहते हैं।

उत्तर

15

मुझे लगता है कि मैंने इस प्रश्न का उत्तर निकाला है, इसलिए मैं इसे पोस्ट करूंगा।

आरबीएनवी रूबी के वैश्विक और/या स्थानीय संस्करण की अनुमति देता है। तो एक बार रूबी स्थापित हो जाती है और आरबीएनवी के माध्यम से प्रबंधित की जाती है, तो आप इसे अपने पूरे सिस्टम द्वारा उपयोग किए जाने वाले वैश्विक रूबी संस्करण के रूप में घोषित कर सकते हैं।

इसी तरह, आप किसी दिए गए निर्देशिका (पूर्व: एक विशिष्ट रेल परियोजना) के भीतर एक स्थानीय रूबी संस्करण घोषित कर सकते हैं।

आपके घर पथ में .gem फ़ाइल वैश्विक रूबी संस्करण द्वारा उपयोग की जाती है, जहां आरबीएनवी निर्देशिका में एक टकरा हुआ स्थानीय रूबी संस्करण द्वारा उपयोग किया जाता है।

नोट, आप (किसी भी कारण से) एक स्थानीय संस्करण घोषित कर सकते हैं जो वैश्विक संस्करण के समान है। उस स्थिति में, स्थानीय संस्करण ~/.gem निर्देशिका की बजाय गहरी rbenv निर्देशिका में मौजूद मणि फ़ाइलों पर भरोसा करेगा।

+6

मैं मणि स्थापित करने वाले पथ को निर्धारित करने के लिए 'gem जो% gemname%' का उपयोग करता हूं। – pavelpopov

2
- /Volumes/Data/nathan/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1 

आरबीएनवी से है, इसलिए रूबी रत्न स्थापित करने के लिए रत्न दिखता है।

- /Volumes/Data/nathan/.gem/ruby/1.9.1 

जाहिर है, rbenv अपनी ही रत्नों के लिए ही सीमित नहीं है, बल्कि साथ ही प्रणाली माणिक से जवाहरात, लेकिन केवल जो कि (gem --user-install के माध्यम से) उपयोगकर्ता के रूप में स्थापित कर रहे हैं शामिल हैं।

+0

ठीक है, यह बस है ... मैंने इस तरह के किसी भी रत्न को स्थापित नहीं किया है। मैंने क्लीन ओएस इंस्टॉल किया, होमब्री> आरबीएनवी> रूबी> रेल स्थापित किया। रेलवे स्थापित करने से पहले मैंने आरबीएनवी के माध्यम से तुरंत वैश्विक रूबी भी सेट की। मेरी रेल परियोजना से, मैं बंडलर और जेमफाइल का उपयोग करता हूं। तो ... मैं बस नहीं देख सकता कि यह बाद की निर्देशिका क्यों मौजूद है। – Nathan

+0

'GEM_PATH' जांचें। – Reactormonk

+3

आपका मतलब है? $ GEM_PATH गूंजें? यह कुछ भी नहीं देता है। – Nathan

5

ध्यान रखें कि आरबीएनवी और आरवीएम जैसे रूबी संस्करण प्रबंधक अपेक्षाकृत हाल ही की रचनाएं हैं। अस्तित्व से पहले, एक व्यवस्थापक उपयोगकर्ता आमतौर पर सिस्टम-व्यापी स्थान जैसे/usr/local में रूबी स्थापित करेगा। लेकिन गैर-प्रशासकों को अपने स्वयं के रत्न स्थापित करने के लिए एक जगह की आवश्यकता थी, क्योंकि उनके पास/usr/local के अंतर्गत लेखन अनुमति नहीं थी। तो rubygems रचनाकारों ने वर्तमान उपयोगकर्ता की होम निर्देशिका में एक माध्यमिक मणि पथ जोड़ने का फैसला किया, जो सिस्टम स्थान के लिए एक समान संरचना होगी।

यहाँ मणि रास्तों पुराने दिनों में की तरह लग रहा था की एक उदाहरण है:

- /usr/local/lib/ruby/gems/1.9.1 
- /Users/kelvin/.gem/ruby/1.9.1 

अभी भी मशीनों जहां गहरे लाल रंग का इस तरह स्थापित किया गया है हो सकता है, और आप अभी भी स्वत: माध्यमिक मणि पथ की है कि सहारा । बेशक आप GEM_PATH पर्यावरण परिवर्तक का उपयोग करके अधिक पथ भी जोड़ सकते हैं, लेकिन ऑटो एक सामान्य मामले को संभालने के लिए अच्छा है।

यदि आपके पास व्यवस्थापकीय अधिकार हैं, या आप एक संस्करण प्रबंधक का उपयोग करते हैं, तो आप एक आर्टिफैक्ट के रूप में ~/.gem dir को अनदेखा कर सकते हैं, अगर आप चाहते हैं तो अतीत का अवशेष।