Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी रत्न, जेमफाइल और बंडलर (द अल्टीमेट गाइड)

रूबी रत्न क्या है?

एक रत्न एक पैकेज है जिसे आप डाउनलोड और इंस्टॉल कर सकते हैं। जब आपको एक स्थापित रत्न की आवश्यकता होती है तो आप अपने रूबी प्रोग्राम में अतिरिक्त कार्यक्षमता जोड़ रहे होते हैं।

रत्न आपको इसकी अनुमति देते हैं :

  • अपने रेल ऐप में एक लॉगिन सुविधा जोड़ें
  • बाहरी सेवाओं (जैसे एपीआई) के साथ आसानी से काम करें
  • वेब एप्लिकेशन बनाएं

यह तो बस कुछ उदाहरण हैं। हर रत्न का अपना लक्ष्य होता है।

हम रत्नों का उपयोग क्यों करते हैं?

  • इस तरह हम रूबी में लाइब्रेरी और टूल साझा करते हैं
  • मणि की फ़ाइल संरचना और प्रारूप यह समझना आसान बनाता है कि वे कैसे काम करते हैं
  • एक विनिर्देश (".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: "git@github.com:rails/rails.git"

आप एक branch पास कर सकते हैं उस शाखा से कोड का उपयोग करने का विकल्प जो मास्टर नहीं है।

इसे पसंद करें :

gem "awesome_print", git: "git@github.com: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 आपके रत्न परिवेश (संस्करण, पथ, कॉन्फ़िगरेशन) के बारे में जानकारी प्रदर्शित करता है।
मणि इंस्टॉल -v <संस्करण> आपको एक विशिष्ट रत्न संस्करण स्थापित करने की अनुमति देता है (उदाहरण:gem install sinatra -v 2.0.0 )।
बंडल अर्थात आपके वर्तमान प्रोजेक्ट के लिए डिपेंडेंसी ग्राफ़ का विज़ुअलाइज़ेशन जेनरेट करता है।
बंडल शो बंडलर के माध्यम से स्थापित किसी विशेष रत्न के बारे में जानकारी दिखाता है। Gemfile वाले फ़ोल्डर के अंदर होना चाहिए।
बंडल पुराना हो गया है वर्तमान प्रोजेक्ट में पुराने रत्नों की सूची प्रदर्शित करता है। --groups का उपयोग कर सकते हैं उन्हें समूहबद्ध करने का विकल्प।
बंडल कंसोल वर्तमान प्रोजेक्ट के Gemfile से रत्नों के साथ एक irb सत्र चलाता है।

सारांश

आपने रूबी के लिए पैकेज सिस्टम, RubyGems के बारे में सीखा है। आपने यह भी जाना कि रत्न की संरचना कैसे की जाती है, Gemfile, Bundler क्या है और Gemfile में क्या अंतर है और Gemfile.lock

मुझे आशा है कि आपको यह उपयोगी लगा होगा!

कृपया इस लेख को साझा करें, न्यूज़लेटर की सदस्यता लें यदि आपने अभी तक (9000+ रूबी डेवलपर्स!) नहीं किया है और मेरी रूबी पुस्तक देखें।

पढ़ने के लिए धन्यवाद और आपका दिन शुभ हो 🙂


  1. रूबी में इनपुट और आउटपुट (आईओ):निश्चित गाइड

    I/O का मतलब इनपुट/आउटपुट है। इनपुट से हमारा मतलब उन सभी डेटा और सूचनाओं से है जो किसी चीज़ में आती हैं (कंप्यूटर, रूबी विधि, आपका दिमाग)। इनपुट के उदाहरण : कीबोर्ड पर आपके प्रेस की कुंजी माउस क्लिक आपके द्वारा पढ़ी जाने वाली पुस्तकें आउटपुट से हमारा मतलब वह सब कुछ है जो इनपुट के परिणामस्वरूप नि

  1. रूबी डेवलपर्स के लिए समय की जटिलता के लिए निश्चित गाइड

    समय जटिलता सबसे दिलचस्प अवधारणाओं में से एक है जिसे आप कंप्यूटर विज्ञान से सीख सकते हैं, और आपको इसे समझने के लिए किसी डिग्री की आवश्यकता नहीं है! यह दिलचस्प है क्योंकि इससे आपको यह देखने में मदद मिलती है कि कोई विशेष एल्गोरिदम या प्रोग्राम धीमा क्यों हो सकता है और इसे और तेज़ बनाने के लिए आप क्या

  1. Mac पर Android संदेशों के लिए अंतिम मार्गदर्शिका

    Mac पर Android संदेश ? असंभव लगता है, है ना? दो ब्रांडों के बीच भयंकर प्रतिस्पर्धा के साथ, ज्यादातर लोग सोचते हैं कि एंड्रॉइड और मैक एक साथ काम नहीं करेंगे। हालांकि, चूंकि Google चाहता है कि बातचीत उपयोगकर्ताओं के लिए सुविधाजनक और लचीली हो, इसलिए उन्होंने Android संदेश विकसित किए हैं। इस मैसेजिं