रूबी रत्न क्या है?
एक रत्न एक पैकेज है जिसे आप डाउनलोड और इंस्टॉल कर सकते हैं। जब आपको एक स्थापित रत्न की आवश्यकता होती है तो आप अपने रूबी प्रोग्राम में अतिरिक्त कार्यक्षमता जोड़ रहे होते हैं।
रत्न आपको इसकी अनुमति देते हैं :
- अपने रेल ऐप में एक लॉगिन सुविधा जोड़ें
- बाहरी सेवाओं (जैसे एपीआई) के साथ आसानी से काम करें
- वेब एप्लिकेशन बनाएं
यह तो बस कुछ उदाहरण हैं। हर रत्न का अपना लक्ष्य होता है।
हम रत्नों का उपयोग क्यों करते हैं?
- इस तरह हम रूबी में लाइब्रेरी और टूल साझा करते हैं
- मणि की फ़ाइल संरचना और प्रारूप यह समझना आसान बनाता है कि वे कैसे काम करते हैं
- एक विनिर्देश (".spec") फ़ाइल जो प्रत्येक रत्न के साथ आती है निर्भरता (अन्य आवश्यक रत्न) का वर्णन करती है, इसलिए कोड में वह सब कुछ है जो इसे काम करने के लिए आवश्यक है
RubyGems के लिए धन्यवाद, हमारे पास केवल एक gem install
. सहायक पुस्तकालयों का एक समृद्ध पारिस्थितिकी तंत्र है दूर!
किसी दिए गए (गैर-रत्न) प्रोजेक्ट के लिए आवश्यक रत्नों की एक सूची को "जेमफाइल" नामक एक विशेष फ़ाइल पर सूचीबद्ध किया जा सकता है ताकि उन्हें बंडलर द्वारा स्वचालित रूप से स्थापित किया जा सके। दोनों को बाद में इस गाइड में शामिल किया गया।
रत्नों के कुछ उदाहरण क्या हैं?
- रेल और उसके सभी घटक (ActiveRecord, ActiveSupport, आदि) रूबी रत्न के रूप में वितरित किए जाते हैं
- प्राइ, आईआरबी का शक्तिशाली विकल्प
- नोकोगिरी, एक लोकप्रिय एक्सएमएल और एचटीएमएल पार्सर
अधिकांश रत्न शुद्ध रूबी कोड होते हैं।
बेहतर प्रदर्शन के लिए कुछ रत्नों में रूबी सी एक्सटेंशन शामिल है।
जब आप मणि स्थापित करते हैं तो यह एक्सटेंशन आपके लिए स्वचालित रूप से बनाया जाता है। कुछ मामलों में, आपको अतिरिक्त सॉफ़्टवेयर को मैन्युअल रूप से स्थापित करने की आवश्यकता हो सकती है जिसे RubyGems द्वारा प्रबंधित नहीं किया जाता है।
अब :
आइए रत्नों का निर्माण करके और रत्न बनाने वाली फ़ाइलों को देखकर रत्नों के बारे में अधिक जानें।
रूबीजेम कैसे बनाएं
आप bundle gem <name>
. चलाकर नए रत्न के लिए फ़ाइलें तैयार कर सकते हैं ।
उदाहरण के लिए :
bundle gem awesome_gem
एक रत्न निम्नलिखित संरचना से बना होता है :
├── awesome_gem.gemspec ├── bin │ ├── console │ └── setup ├── Gemfile ├── lib │ ├── awesome_gem │ │ └── version.rb │ └── awesome_gem.rb ├── Rakefile ├── README.md └── test ├── awesome_gem_test.rb └── test_helper.rb
यह .gemspec
फ़ाइल वह जगह है जहां आपको मणि के बारे में सारी जानकारी मिल जाएगी ।
इसमें शामिल है :
- रत्न नाम
- रत्न सारांश (संक्षिप्त विवरण)
- लेखक का नाम
- निर्भरता सूची
- मणि में शामिल की जाने वाली फाइलों की सूची
- वैकल्पिक:लेखक का ईमेल पता, प्रोजेक्ट URL (होमपेज), निष्पादन योग्य, c एक्सटेंशन, लंबा विवरण।
मणि संस्करण को lib/<gem_name>/version.rb
में स्थिरांक के रूप में परिभाषित किया गया है ।
यहां एक उदाहरण जेमस्पेक दिया गया है :
Gem::Specification.new do |spec| spec.name = "awesome_gem" spec.version = AwesomeGem::VERSION spec.authors = ["Jesus Castello"] spec.summary = "Example gem for article about Ruby gems" spec.files = Dir['**/**'].grep_v(/.gem$/) spec.require_paths = ["lib"] spec.add_development_dependency "bundler", "~> 1.16" spec.add_development_dependency "rake", "~> 10.0" spec.add_development_dependency "minitest", "~> 5.0" end
require_paths
सरणी वह जगह है जहां रूबी आपकी मणि फाइलों की तलाश करेगी जब आपको उनकी आवश्यकता होगी। यह आपको अपना कोड lib/<gem_name>/
. के अंतर्गत रखने की अनुमति देता है और उसके बाद इसकी आवश्यकता होती है require "<gem_name>/<file_name>"
।
उदाहरण के लिए :
lib/awesome_gem/parser.rb
. नाम की एक फाइल की आवश्यकता होगी क्योंकि require "awesome_gem/parser"
मणि के अंदर कहीं से भी।
आपकी अधिकांश आवश्यकताएँ lib/<gem_name>.rb
. में होंगी (/lib
. के मूल में एकमात्र फ़ाइल )।
यह वह फ़ाइल है जो आपके require
. पर लोड हो जाती है मणि!
अगला :
add_development_dependency
रेखाएं उन रत्नों को परिभाषित करती हैं जिनका उपयोग आप विकास के दौरान करने जा रहे हैं।
ये मिनिटेस्ट, RSpec, या pry जैसे रत्न हैं।
जबकि add_dependency
आपके द्वारा अपने कोड के हिस्से के रूप में उपयोग किए जाने वाले रत्नों को परिभाषित करता है।
एक बार जब आप सारांश और विवरण को डिफ़ॉल्ट मानों से बदल देते हैं… तो आप bin/console
का उपयोग करके अपने रत्न के साथ एक irb सत्र लोड करने में सक्षम होंगे। प्रोग्राम जो bundle gem
आपके लिए बनाता है।
उदाहरण :
$ bin/console irb(main):001:0> irb(main):002:0> irb(main):003:0> AwesomeGem => AwesomeGem irb(main):004:0> irb(main):005:0> AwesomeGem::VERSION => "0.1.0"
फिर आप gem build <name>.gemspec
. का उपयोग करके मणि को पैकेज कर सकते हैं और gem push
. का उपयोग करके इसे rubygems.org पर प्रकाशित करें ।
बंडलर क्या है?
रूबी रत्नों के बारे में सीखते समय आप बंडलर . के बारे में भी पढ़ सकते हैं ।
लेकिन बंडलर वास्तव में क्या है?
बंडलर निर्भरता प्रबंधन . के लिए एक उपकरण है ।
क्या RubyGems ने इसे पहले ही संभाल नहीं लिया था?
खैर, ऐसा होता है... लेकिन केवल स्वयं रत्नों के लिए ।
आपका नियमित रूबी एप्लिकेशन एक रत्न के रूप में नहीं बनाया गया है, इसलिए इसे यह सुविधा नहीं मिलती है।
इसीलिए बंडलर मौजूद है!
Gemfiles को समझना
क्या आपने वो Gemfile
देखे हैं फ़ाइलें?
यहीं पर आप लिखते हैं कि आप अपने रूबी एप्लिकेशन के लिए किन रत्नों का उपयोग करना चाहते हैं ।
ये रत्न आपके लिए require
. के बिना लोड किए जाएंगे उन्हें।
एक जेमफाइल इस तरह दिखता है :
ruby '2.5.0' gem 'rails', '~> 5.2.1' gem 'sqlite3' gem 'puma', '~> 3.11' gem 'bootsnap', '>= 1.1.0', require: false
बंडलर (और संस्करण 2.0 के बाद से RubyGems) इस फ़ाइल को पढ़ सकते हैं और इन रत्नों के अनुरोधित संस्करणों को स्थापित कर सकते हैं।
bundle install
. चलाते समय आपको यही देखना चाहिए आदेश:
Using turbolinks-source 5.1.0 Using turbolinks 5.1.1 Using uglifier 4.1.18 Using web-console 3.6.2 Bundle complete! 18 Gemfile dependencies, 78 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed.
अब :
ये प्रतीक क्या हैं (जैसे ~>
) आपके Gemfile में प्रत्येक रत्न के लिए संस्करण घोषित करते समय उपयोग किया जाता है?
ये आपको संस्करणों की एक श्रृंखला . का अनुरोध करने की अनुमति देते हैं ।
आप कुछ इस तरह कह सकते हैं, "मैं चाहता हूं कि संस्करण 1.2 के बराबर या बड़ा हो, लेकिन 2.0 से कम हो"।
जो इस तरह दिखेगा:
gem 'puma', '~> 1.2'
~>
इस श्रेणी के लिए एक शॉर्टकट है :
gem 'puma', '>= 1.2', '< 2.0'
~> 5.2.1
. के मामले में , इसका मतलब है बिल्कुल यही :
'>= 5.2.1', '< 5.3'
संस्करण संख्या जितनी अधिक विशिष्ट होगी, संस्करण श्रेणी उतनी ही अधिक प्रतिबंधित होगी।
Gemfile विकल्प और Gemfile.lock
Gemfile के अंदर रत्न की आवश्यकता होने पर आपके पास कुछ विकल्प होते हैं।
उदाहरण के लिए :
आप किसी भिन्न स्रोत से रत्न निकालना चाह सकते हैं, जैसे GitHub।
यह सहायक है जब आपको परियोजना के नवीनतम संस्करण का उपयोग करने की आवश्यकता होती है , भले ही इसे अभी तक rubygems.org पर जारी नहीं किया गया है।
यहां एक उदाहरण दिया गया है:
gem "rails", git: "[email protected]:rails/rails.git"
आप एक branch
पास कर सकते हैं उस शाखा से कोड का उपयोग करने का विकल्प जो मास्टर नहीं है।
इसे पसंद करें :
gem "awesome_print", git: "[email protected]:awesome-print/awesome_print.git", branch: "v2"
एक अन्य विकल्प जो आपको मिल सकता है वह है require: false
।
वह क्या करता है?
यह बंडलर को बताता है कि आपके लिए मणि की स्वतः आवश्यकता नहीं है। इसका मतलब है कि आपको require
करना होगा जरूरत पड़ने पर इसे अपने कोड में रखें।
इसका उपयोग उन रत्नों के लिए किया जाता है जिनका दायरा सीमित होता है।
उदाहरण के लिए :
रत्न जो आप एक विशिष्ट रेक कार्य में उपयोग करते हैं, लेकिन आप अपने रेल नियंत्रकों और मॉडलों में उपयोग नहीं करते हैं। इसका लाभ यह है कि आप अपने ऐप कोड में मेमोरी सहेजते हैं क्योंकि आप उस रत्न को केवल तभी लोड करते हैं जब आपको इसकी आवश्यकता होती है।
आप पर्यावरण के अनुसार रत्नों का समूह . भी कर सकते हैं ।
इसका मतलब है कि आपके पास ऐसे रत्न हो सकते हैं जो केवल विकास में स्थापित और लोड किए गए हों (जैसे capybara
&pry
)।
अंत में, बंडलर एक Gemfile.lock
बनाता है ।
क्या अंतर है?
एक Gemfile.lock
स्वतः जेनरेट . है और यह कहता है वास्तव में प्रत्येक रत्न के कौन से संस्करण स्थापित किए गए थे ।
बंडलर इन संस्करणों को स्थापित करेगा ताकि जब आप इस एप्लिकेशन को उत्पादन में तैनात करते हैं, या अन्य डेवलपर्स के साथ अपनी परियोजना साझा करते हैं, तो हर कोई समान रत्नों के सेट के साथ काम करेगा।
उपयोगी रत्न और बंडलर कमांड
Command | विवरण |
---|---|
मणि सूची | अपने सभी स्थापित रत्नों की सूची बनाएं। रत्नों को नाम से फ़िल्टर करने के तर्क को स्वीकार करता है (उदाहरण:gem list active ) |
मणि जो | आपको वह पथ देता है जहां एक रत्न स्थापित है। |
मणि खोज | कॉन्फ़िगर किए गए स्रोतों से रत्न खोजें (डिफ़ॉल्ट:rubygems.org)। एक रेगुलर एक्सप्रेशन लेता है (उदाहरण:gem search "\Aawesome_" )। |
मणि env | आपके रत्न परिवेश (संस्करण, पथ, कॉन्फ़िगरेशन) के बारे में जानकारी प्रदर्शित करता है। |
मणि इंस्टॉल | आपको एक विशिष्ट रत्न संस्करण स्थापित करने की अनुमति देता है (उदाहरण:gem install sinatra -v 2.0.0 )। |
बंडल अर्थात | आपके वर्तमान प्रोजेक्ट के लिए डिपेंडेंसी ग्राफ़ का विज़ुअलाइज़ेशन जेनरेट करता है। |
बंडल शो | बंडलर के माध्यम से स्थापित किसी विशेष रत्न के बारे में जानकारी दिखाता है। Gemfile वाले फ़ोल्डर के अंदर होना चाहिए। |
बंडल पुराना हो गया है | वर्तमान प्रोजेक्ट में पुराने रत्नों की सूची प्रदर्शित करता है। --groups का उपयोग कर सकते हैं उन्हें समूहबद्ध करने का विकल्प। |
बंडल कंसोल | वर्तमान प्रोजेक्ट के Gemfile से रत्नों के साथ एक irb सत्र चलाता है। |
सारांश
आपने रूबी के लिए पैकेज सिस्टम, RubyGems के बारे में सीखा है। आपने यह भी जाना कि रत्न की संरचना कैसे की जाती है, Gemfile, Bundler क्या है और Gemfile
में क्या अंतर है और Gemfile.lock
।
मुझे आशा है कि आपको यह उपयोगी लगा होगा!
कृपया इस लेख को साझा करें, न्यूज़लेटर की सदस्यता लें यदि आपने अभी तक (9000+ रूबी डेवलपर्स!) नहीं किया है और मेरी रूबी पुस्तक देखें।
पढ़ने के लिए धन्यवाद और आपका दिन शुभ हो 🙂