चारों ओर के बच्चों को इकट्ठा करो, और दादाजी को उन पुराने दिनों के बारे में बताने दो जब जीवन कठिन था, और रत्न स्थापित करना एक सिरदर्द-उत्प्रेरण, बाल खींचने, दांत पीसने की परीक्षा थी।
वापस जब मैं रूबी में शुरू कर रहा था, वहां कोई बंडलर नहीं था और रत्नों को कठिन तरीके से स्थापित किया जाना था। रेल में, इसका मतलब rake gems:install
. चलाना था एक लाख बार, रास्ते में होने वाली बग को ठीक करना, जब तक कि कमांड बिना किसी त्रुटि के पारित न हो जाए। आज हम पुराने जमाने की तरह एक रत्न बनाने जा रहे हैं, यह देखने के बाद कि रत्न क्या हैं और वे कैसे काम करते हैं।
रत्न, वे क्या हैं?
RubyGems अन्य लोगों द्वारा लिखी गई कार्यक्षमता के साथ अपने स्वयं के कोड का विस्तार करने का एक आसान तरीका है। उदाहरण के लिए, अपना स्वयं का प्रमाणीकरण/प्राधिकरण कोड लिखने के बजाय, आप डेविस का उपयोग कर सकते हैं, या यदि आप अपलोड की गई छवियों को फिर से आकार देना चाहते हैं तो आप कैरियरवेव का उपयोग कर सकते हैं। यह आपको पुन:प्रयोज्य कोड लिखने की अनुमति देता है जिसे आप अन्य लोगों के साथ साझा कर सकते हैं।
लेकिन वे कैसे काम करते हैं?
अपने सबसे बुनियादी रूप में, एक रत्न एक ज़िप्ड-अप निर्देशिका से अधिक कुछ नहीं है जिसमें कोड और एक <name>.gemspec
होता है। फ़ाइल। यह .gemspec
फ़ाइल में रत्न के बारे में मेटाडेटा होता है जैसे कि उसका नाम, कौन सी फाइलें लोड करनी हैं और उसकी निर्भरताएँ।
gem install
या bundle
कमांड ज़िप फ़ाइल को स्रोत से डाउनलोड करता है और इसे आपकी हार्ड ड्राइव पर निकालता है। आप bundle info <gem name>
. चलाकर पता लगा सकते हैं कि रत्न कहाँ स्थित है या सीधे bundle open <gem name>
. चलाकर मणि निर्देशिका खोलकर ।
अपने आवेदन में रत्न लोड करने के लिए, Rubygems बंदर-पैच require
Kernel
. में कार्य करता है कक्षा। यह पहले डिस्क से फ़ाइल को पढ़ने का प्रयास करता है और यदि वह काम नहीं करता है, तो यह आपके सिस्टम के प्रत्येक रत्न में फ़ाइल को हल करने का प्रयास करता है। एक बार जब यह फ़ाइल को मणि में पाता है तो यह मणि को लोड पथ में जोड़कर "सक्रिय" करता है।
यदि आप बंडलर का उपयोग करते हैं, तो यह प्रत्येक विशिष्ट रत्न को setup
. के दौरान लोड पथ में जोड़ता है बुलाना। यह रूबीगेम्स को रास्तों को हल करने की कोशिश करने की परेशानी से बचाता है। यह रूबी को Gemfile(.lock) में चयनित रत्न के भिन्न संस्करण को लोड करने से भी रोकता है।
मैं एक कैसे बना सकता हूं?
अपना खुद का रत्न बनाने का सबसे आसान तरीका है बंडलर का उपयोग करके एक मणि मचान बनाना। इसमें एक उचित निर्देशिका संरचना, लाइसेंस, आचार संहिता और रत्न के लिए एक परीक्षण वातावरण शामिल है।
हालांकि, आज हम सिर्फ दो फाइलों के साथ अपना खुद का मिनिमलिस्टिक रत्न बनाने जा रहे हैं, जिसमें एक कोड और एक gemspec
है। फ़ाइल जिसमें मेटाडेटा है। कॉल करने पर हमारा रत्न उपयोगकर्ता का अभिवादन करेगा। आइए हमारे रत्न के लिए एक निर्देशिका बनाकर शुरू करें।
mkdir howdy
cd howdy
इस निर्देशिका में, हम एक lib
बनाएंगे फ़ोल्डर जिसमें कोड और एक howdy.gemspec
. होगा फ़ाइल जिसमें मेटाडेटा होगा। यह कुछ इस तरह दिखना चाहिए:
tree
.
├── howdy.gemspec
└── lib
└── howdy.rb
हमारे हाउडी रत्न में निम्न कोड है:
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 = ["[email protected]"]
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 पर प्रकाशित कर सकते हैं आदेश।
रिकैप
ये एक बहुत ही बुनियादी रत्न बनाने और प्रकाशित करने के लिए आवश्यक कदम हैं। हमें उम्मीद है कि आपने हमें रत्नों के पुरातत्व में गोता लगाने और उन्हें बनाने के पुराने स्कूल के तरीके का आनंद लिया। जैसा कि पहले उल्लेख किया गया था, यह शैक्षिक उद्देश्यों के लिए था; हम आज की दुनिया में एक रत्न पाड़ बनाने के लिए बंडलर का उपयोग करने की सलाह देते हैं।
शांति से बाहर, युवाओं! यदि आपके पास कोई विचार, प्रश्न या टिप्पणी है, तो कृपया बेझिझक हमें बताएं।