किसी ने आपको एक बार कहा होगा, "सिस्टम Ruby का उपयोग न करें।" यह अच्छी सलाह है, लेकिन क्यों? आइए पता लगाते हैं।
आपके पास कौन सा Ruby है?
macOS एक "सिस्टम Ruby" के साथ प्री-इंस्टॉल्ड आता है।
which कमांड का उपयोग करके देखें कि Ruby कहां इंस्टॉल है:
$ which ruby
/usr/bin/ruby
यदि आपको /usr/bin/ruby दिखाई देता है, तो यह प्री-इंस्टॉल्ड macOS सिस्टम Ruby है।
सिसएडमिन स्क्रिप्ट चलाने के लिए सिस्टम Ruby का उपयोग करना ठीक है, जब तक आप सिस्टम Ruby को अपडेट करने या जेम्स जोड़ने का प्रयास करके इसे बदलते नहीं हैं।
लेकिन आप Ruby में प्रोजेक्ट विकसित करते समय इसका उपयोग नहीं करना चाहते।
डेवलपमेंट के लिए Ruby
Ruby के साथ प्रोजेक्ट विकसित करने के लिए, आपको Homebrew के साथ Ruby इंस्टॉल करना चाहिए या asdf, chruby, rbenv, या rvm जैसे वर्जन मैनेजर का उपयोग करना चाहिए।
एक वर्जन मैनेजर मदद करता है यदि आप कई प्रोजेक्ट्स को संभाल रहे हैं और एक साथ सभी को अपडेट नहीं कर सकते। वर्जन मैनेजर्स की तुलना करने और Ruby इंस्टॉल करने का सबसे अच्छा तरीका दिखाने वाले गाइड के लिए, मेरा लेख "Install Ruby on a Mac" देखें।
लेकिन macOS डिफ़ॉल्ट Ruby का उपयोग क्यों नहीं? आइए उन कारणों पर नज़र डालते हैं कि मैक डिफ़ॉल्ट Ruby का उपयोग डेवलपमेंट के लिए बुरा विचार क्यों है।
जेम इंस्टॉलेशन परेशानी
RubyGems वे रेडी-मेड सॉफ्टवेयर लाइब्रेरी हैं जो Ruby में डेवलपमेंट को आसान और मजेदार बनाती हैं। अधिकांश Ruby प्रोजेक्ट कम से कम कुछ जेम्स का उपयोग करते हैं।
यदि आप Mac सिस्टम Ruby का उपयोग करते हैं, तो gem install चलाने से जेम्स को सिस्टम Ruby डायरेक्टरी /Library/Ruby/Gems/2.6.0 में सेव करने का प्रयास किया जाएगा। वह डायरेक्टरी root, सिस्टम सुपरयूजर के स्वामित्व में है। सामान्य उपयोगकर्ताओं को इसमें लिखने की अनुमति नहीं है (और आपको वास्तव में इस फोल्डर को बदलना नहीं चाहिए)।
यदि आप जेम इंस्टॉल करने का प्रयास करते हैं, उदाहरण के लिए gem install rails, तो आपको परमिशन एरर मिलेगा:
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory
यह सिस्टम सुरक्षा का उल्लंघन करता है
यूनिक्स-आधारित सिस्टम शक्तिशाली हैं, इसलिए एक वर्कअराउंड है। आप परमिशन प्रतिबंध को ओवरराइड करने के लिए सुपरयूजर के रूप में जेम्स इंस्टॉल कर सकते हैं। लेकिन ऐसा न करें!
$ sudo gem install rails
जब भी आप sudo चलाने वाले होते हैं, तो आपको रुककर पूछना चाहिए कि क्या आप अपने पैर पर कुल्हाड़ी मारने वाले हैं।
इस मामले में, आपको sudo की आवश्यकता है क्योंकि आप OS द्वारा प्रबंधित सिस्टम फाइलों को बदल रहे हैं। ऐसा न करें! आप सिस्टम को टूटी या समझौता की गई स्थिति में छोड़ सकते हैं। इससे भी बदतर, एक जेम में दुर्भावनापूर्ण कोड हो सकता है जो आपके कंप्यूटर से छेड़छाड़ करता है।
जेम प्रबंधन
अनुभवी डेवलपर जेम्स इंस्टॉल करने और उनकी निर्भरता प्रबंधित करने के लिए Bundler का उपयोग करते हैं।
कल्पना करें कि आपके पास प्रोजेक्ट हैं जो एक जेम के विभिन्न संस्करणों का उपयोग करते हैं (शायद आपके प्रोजेक्ट्स के बीच एक नया जेम रिलीज हुआ था)। या शायद आपके प्रोजेक्ट में दो अलग-अलग जेम्स एक निर्भर जेम के विभिन्न संस्करणों पर भरोसा करते हैं।
Bundler आपके प्रोजेक्ट डायरेक्टरी में एक Gemfile का उपयोग करके उन जेम्स को ट्रैक करता है जिनकी आपको आवश्यकता है। यदि आप सिस्टम Ruby के साथ sudo का उपयोग करके जेम्स इंस्टॉल करते, तो आप सिस्टम Ruby डायरेक्टरी में असंगत जेम्स की गड़बड़ी के साथ समाप्त होते।
आप अपने होम डायरेक्टरी का उपयोग जेम्स के लिए करने वाली कमांड के साथ Bundler इंस्टॉल करके सिस्टम परमिशन समस्या को हल कर सकते हैं। लेकिन Homebrew के साथ Ruby इंस्टॉल करना या वर्जन मैनेजर का उपयोग करना और साथ आने वाले Bundler का उपयोग करना आसान है, जो आपके लोकल डेवलपमेंट एनवायरनमेंट को सही ढंग से सेट अप करेगा।
नवीनतम Ruby का उपयोग करें
जब आप कोई प्रोजेक्ट शुरू करते हैं, तो नवीनतम Ruby रिलीज़ का उपयोग करें (लिखने के समय यह 3.0 है)।
macOS Catalina या Big Sur में सिस्टम Ruby, Ruby 2.6.3 है, जो पुराना है। यदि आप Ruby के साथ शुरुआत कर रहे हैं, तो Homebrew के साथ इंस्टॉल करें और Ruby 3.0 के साथ एक प्रोजेक्ट पर काम करें। जब आप दूसरा प्रोजेक्ट बनाना शुरू करते हैं, तो वर्जन मैनेजर इंस्टॉल करने का समय हो सकता है ताकि आप विभिन्न Ruby संस्करणों वाले प्रोजेक्ट्स को संभाल सकें।
Big Sur के बाद macOS
macOS Big Sur अब वर्तमान संस्करण है। Apple कहता है:
"Python, Ruby, और Perl जैसे स्क्रिप्टिंग भाषा रनटाइम लिगेसी सॉफ्टवेयर के साथ कम्पैटिबिलिटी के लिए macOS में शामिल हैं। macOS के भविष्य के संस्करण डिफ़ॉल्ट रूप से स्क्रिप्टिंग भाषा रनटाइम शामिल नहीं करेंगे, और आपको अतिरिक्त पैकेज इंस्टॉल करने की आवश्यकता हो सकती है।"
यदि आप इसे 2021 के अंत में पढ़ रहे हैं, तो सिस्टम Ruby पहले ही जा चुका हो सकता है। यदि नहीं, तो Homebrew या वर्जन मैनेजर के साथ Ruby इंस्टॉल करके खुद को तैयार करें।
Ruby का आनंद लें
Rails के साथ वेब एप्लिकेशन बनाने की योजना बना रहे डेवलपर्स के लिए, मैंने एक गाइड लिखा है, "Install Rails on a Mac", जो "Install Ruby on a Mac" से आगे जाकर दिखाता है कि Node के साथ-साथ Ruby के साथ काम करने वाला वर्जन मैनेजर कैसे चुनें।
Ruby में कोडिंग का आनंद लें! आखिरकार, यह प्रोग्रामर की खुशी के लिए समर्पित भाषा के रूप में जानी जाती है। लेकिन याद रखें, सिस्टम Ruby macOS के लिए है, आपके लिए नहीं।