संक्षिप्त विवरण: rbenv आपके वातावरण में हुक करके काम करता है PATH। अवधारणा सरल है, लेकिन शैतान विवरण में है; नीचे पूर्ण स्कूप।
सबसे पहले, rbenv बनाता शिम्स सभी आदेशों के लिए ( ruby, irb, rake, gemऔर इतने पर) रूबी के अपने सभी स्थापित संस्करणों में। इस प्रक्रिया को रिहैशिंग कहा जाता है । हर बार जब आप रूबी का एक नया संस्करण स्थापित करते हैं या एक रत्न स्थापित करते हैं जो एक कमांड प्रदान करता है, rbenv rehashयह सुनिश्चित करने के लिए चलाएं कि किसी भी नए कमांड को शिम किया गया है।
ये शिम एक ही डायरेक्टरी में ( ~/.rbenv/shimsडिफ़ॉल्ट रूप से) रहते हैं। Rbenv का उपयोग करने के लिए, आपको केवल शिम निर्देशिका को अपने सामने रखने की आवश्यकता है PATH:
export PATH="$HOME/.rbenv/shims:$PATH"
फिर किसी भी समय आप rubyकमांड लाइन से चलते हैं , या एक स्क्रिप्ट चलाते हैं जिसका शेबंग पढ़ता है #!/usr/bin/env ruby, आपका ऑपरेटिंग सिस्टम ~/.rbenv/shims/rubyपहले मिल जाएगा और किसी भी अन्य rubyनिष्पादन योग्य के बजाय इसे चलाएं जो आपने स्थापित किया हो।
प्रत्येक शिम एक छोटी बैश स्क्रिप्ट है जो बदले में चलती है rbenv exec। तो आपके मार्ग में रेंबव के साथ, irbके बराबर है rbenv exec irb, और ruby -e "puts 42"के बराबर है rbenv exec ruby -e "puts 42"।
rbenv execआदेश आंकड़े बाहर रूबी के किस संस्करण उपयोग करना चाहते हैं, तो उस संस्करण के लिए इसी आदेश चलाता है। ऐसे:
- यदि
RBENV_VERSIONपर्यावरण चर सेट किया गया है, तो इसका मान रूबी के संस्करण का उपयोग करने के लिए निर्धारित करता है।
- यदि वर्तमान कार्यशील निर्देशिका में
.rbenv-versionफ़ाइल है, तो इसकी सामग्री का उपयोग RBENV_VERSIONपर्यावरण चर को सेट करने के लिए किया जाता है ।
- यदि
.rbenv-versionवर्तमान निर्देशिका में कोई फ़ाइल नहीं है , तो rbenv प्रत्येक .rbenv-versionफ़ाइल के मूल फ़ाइल को तब तक खोजता है, जब तक कि वह आपके फ़ाइल सिस्टम की जड़ को हिट न कर दे। यदि कोई पाया जाता है, तो इसकी सामग्री का उपयोग RBENV_VERSIONपर्यावरण चर को सेट करने के लिए किया जाता है ।
- यदि
RBENV_VERSIONअभी भी सेट नहीं किया गया है, तो rbenv ~/.rbenv/versionफ़ाइल की सामग्री का उपयोग करके इसे सेट करने का प्रयास करता है ।
- यदि कोई संस्करण कहीं भी निर्दिष्ट नहीं किया गया है, तो rbenv मान लेता है कि आप "सिस्टम" रूबी का उपयोग करना चाहते हैं - यानी अगर rbenv आपके रास्ते में नहीं थे, तो जो भी संस्करण चलाया जाएगा।
(आप rbenv localकमांड के साथ एक परियोजना-विशिष्ट रूबी संस्करण सेट कर सकते हैं , जो .rbenv-versionवर्तमान निर्देशिका में एक फ़ाइल बनाता है । इसी तरह, फ़ाइल को निर्दिष्ट rbenv globalकरता है ~/.rbenv/version।)
एक RBENV_VERSIONपर्यावरण चर के साथ सशस्त्र , rbenv ~/.rbenv/versions/$RBENV_VERSION/binआपके सामने जोड़ता है PATH, फिर कमांड और तर्कों को निष्पादित करता है rbenv exec। देखा!
हुड के तहत वास्तव में क्या होता है, इस पर पूरी तरह से नज़र रखने के लिए, RBENV_DEBUG=1रूबी कमांड को सेट करने और चलाने का प्रयास करें । हर बैश कमांड कि rbenv रन आपके टर्मिनल को लिखा जाएगा।
अब, रेंबव केवल स्विचिंग संस्करणों के साथ संबंध रखता है, लेकिन प्लगइन्स का एक संपन्न पारिस्थितिकी तंत्र आपको रूबी को स्थापित करने से लेकर आपके पर्यावरण को स्थापित करने , "जवाहरात" और यहां तक कि स्वचालित bundle execकरने तक सब कुछ करने में मदद करेगा ।
मुझे पूरा यकीन नहीं है कि रूबी संस्करणों को स्विच करने के लिए आईआरसी के समर्थन का क्या करना है, और आरबनेव को सरल और समझ में आता है कि समर्थन की आवश्यकता नहीं है। लेकिन क्या आपको कभी मदद की ज़रूरत है, मुद्दा ट्रैकर और ट्विटर केवल कुछ ही क्लिक दूर हैं।
प्रकटीकरण: मैं rbenv, रूबी-बिल्ड, और rbenv-var का लेखक हूं।