बच्चों इकट्ठा हो जाओ, और दादाजी को पुराने दिनों के तरीके सुनाओ जब जीवन कठिन था, और जेम्स इंस्टॉल करना सिरदर्द पैदा करने वाला, बाल खींचने वाला, दांत पीसने वाला अनुभव था।
जब मैं रूबी में बस शुरू कर रहा था, तब कोई बंडलर नहीं था और जेम्स को कठिन तरीके से इंस्टॉल करना पड़ता था। रेल्स में, इसका मतलब था rake gems:install को लाखों बार चलाना, रास्ते में आने वाले बग्स को ठीक करना, जब तक कि कमांड बिना त्रुटियों के पास न हो जाए। आज, हम पुराने स्कूल के तरीके से एक जेम बनाने जा रहे हैं, यह देखने के बाद कि जेम्स क्या हैं और वे कैसे काम करते हैं।
जेम्स, वे क्या हैं?
RubyGems अन्य लोगों द्वारा लिखी गई कार्यक्षमता के साथ अपने स्वयं के कोड को विस्तारित करने का एक आसान तरीका है। उदाहरण के लिए, अपने स्वयं के प्रमाणीकरण/प्राधिकरण कोड को लिखने के बजाय, आप Devise का उपयोग कर सकते हैं, या यदि आप अपलोड की गई छवियों का आकार बदलना चाहते हैं तो आप CarrierWave का उपयोग कर सकते हैं। यह आपको पुन: प्रयोज्य कोड लिखने की अनुमति देता है जिसे आप अन्य लोगों के साथ साझा कर सकते हैं।
लेकिन वे कैसे काम करते हैं?
अपने सबसे बुनियादी रूप में, एक जेम कोड युक्त एक डायरेक्टरी से ज्यादा कुछ नहीं है जिसे ज़िप किया गया है और एक <name>.gemspec फाइल। यह .gemspec फाइल जेम के बारे में मेटाडेटा रखती है जैसे इसका नाम, कौन सी फाइलें लोड करनी हैं और इसकी निर्भरताएं।
gem install या bundle कमांड सोर्स से ज़िप फाइल डाउनलोड करती है और इसे आपकी हार्ड ड्राइव पर निकालती है। आप bundle info <gem name> चलाकर या सीधे bundle open <gem name> चलाकर जेम डायरेक्टरी खोलकर पता लगा सकते हैं कि जेम कहां स्थित है।
जेम को अपने एप्लिकेशन में लोड करने के लिए, RubyGems Kernel क्लास में require फ़ंक्शन को मंकी-पैच करता है। यह पहले डिस्क से फाइल को पढ़ने की कोशिश करता है और अगर वह काम नहीं करता है, तो यह आपके सिस्टम पर प्रत्येक जेम में फाइल को हल करने की कोशिश करता है। एक बार जब यह फाइल को एक जेम में ढूंढ लेता है तो यह जेम को "सक्रिय" करता है इसे लोड पथ में जोड़कर।
यदि आप बंडलर का उपयोग करते हैं, तो यह setup कॉल के दौरान प्रत्येक विशिष्ट जेम को लोड पथ में जोड़ता है। यह RubyGems को पथों को हल करने की परेशानी से बचाता है। यह रूबी को Gemfile(.lock) में चयनित संस्करण से अलग जेम के संस्करण को लोड करने से भी रोकता है।
मैं एक कैसे बना सकता हूँ?
अपना स्वयं का जेम बनाने का सबसे आसान तरीका बंडलर का उपयोग करके जेम स्कैफोल्ड जेनरेट करना है। इसमें जेम के लिए उचित डायरेक्टरी संरचना, लाइसेंस, आचार संहिता और टेस्ट वातावरण शामिल है।
हालांकि, आज हम केवल दो फाइलों के साथ अपना न्यूनतम जेम बनाने जा रहे हैं, एक कोड युक्त और एक gemspec फाइल जिसमें मेटाडेटा है। हमारा जेम कॉल किए जाने पर उपयोगकर्ता का अभिवादन करेगा। आइए अपने जेम के लिए एक डायरेक्टरी बनाकर शुरू करें।
mkdir howdy cd howdyइस डायरेक्टरी में, हम कोड युक्त एक lib फोल्डर और मेटाडेटा युक्त एक howdy.gemspec फाइल बनाएंगे। यह कुछ इस तरह दिखना चाहिए:
tree . ├── howdy.gemspec └── lib └── howdy.rbहमारे howdy जेम में निम्न कोड है:
lib/howdy.rb
class Howdy def greet "howdy!" end endएक न्यूनतम howdy.gemspec फाइल में संस्करण, लेखक, आदि के बारे में जानकारी होती है। यह जेम बनाते समय रखी जाने वाली फाइलों को भी निर्दिष्ट करता है। यह जेम के उपयोगकर्ताओं को टेस्ट और अन्य फाइलें डाउनलोड करने से रोकता है जो जेम कोड चलाने के लिए आवश्यक नहीं हैं।
Gem::Specification.new do |spec| spec.name = "howdy" spec.version = "0.0.1" spec.authors = ["Robert Beekman"] spec.email = ["robert@example.com"] spec.summary = %(Greets the user) spec.description = %(Howdy is a gem that greets the user when called) spec.license = "MIT" spec.files = ["lib/howdy.rb"] endजेम बनाने के लिए हम gem build howdy.gemspec कमांड का उपयोग कर सकते हैं। यह आपके कोड युक्त एक howdy-0.0.1.gem फाइल उत्पन्न करता है। जेम को अन्य लोगों के लिए उपलब्ध कराने के लिए, आप इसे gem publish कमांड के साथ rubygems.org पर प्रकाशित कर सकते हैं।
रिकैप
ये बहुत ही बुनियादी जेम बनाने और प्रकाशित करने के लिए आवश्यक कदम हैं। हम आशा करते हैं कि आपको जेम्स के पुरातत्व में हमारे गोता लगाने का आनंद आया, और उन्हें बनाने का पुराना स्कूल तरीका। जैसा कि पहले उल्लेख किया गया है यह शैक्षिक उद्देश्यों के लिए था; हम आज की दुनिया में जेम स्कैफोल्ड जेनरेट करने के लिए बंडलर का उपयोग करने की सलाह देते हैं।
शांति, युवाओं! यदि आपके कोई विचार, प्रश्न या टिप्पणी हैं, तो कृपया हमें बताने में संकोच न करें।