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

रूबी और रेल्स कंसोल को समझना: `irb`, `bundle exec irb`, `bundle console`, और `rails console`

रूबी या रेल्स कंसोल लॉन्च करने के बहुत सारे तरीके हैं: irb, bundle exec irb, bundle console, और rails console कुछ सबसे आम हैं। वे समान लगते हैं, लेकिन वे प्रत्येक थोड़ा अलग तरीके से काम करते हैं।

यदि आप नहीं जानते कि वे अंतर क्या हैं, तो आपको कुछ समस्याएं होंगी। शायद आप अपने एक्टिवरिकॉर्ड मॉडल्स को डेटाबेस से कनेक्ट नहीं कर पाएंगे। या आप एक फाइल रिक्वायर करेंगे और गलत वर्जन प्राप्त करेंगे। या एक लाइब्रेरी जिसे आपने सोचा था कि उपलब्ध होगी, नहीं थी।

आप कैसे सुनिश्चित करते हैं कि आप सही समय पर सही कंसोल का उपयोग कर रहे हैं?

बंडलर बनाम नॉन-बंडलर

irb सिर्फ एक सादा रूबी कंसोल है। यह आपके Gemfile की परवाह नहीं करता। यह कोर रूबी लाइब्रेरीज़ के अलावा कुछ भी लोड नहीं करता। आप जो कुछ भी चाहते हैं, आपको उसे require करना होगा।

यदि आप gem install का उपयोग करके एक जेम इंस्टॉल करते हैं, तो आप इसे irb के अंदर रिक्वायर कर सकते हैं। यदि आपने bundle install का उपयोग किया, तो आप शायद इसे रिक्वायर कर सकते हैं, यह इस बात पर निर्भर करता है कि बंडलर ने इसे कहां रखा। (बंडलर कभी-कभी जेम्स को रूबी के जेम पथ के बाहर रखता है, यदि आप bundle install --path या bundle install --deployment जैसा कुछ चलाते हैं)।

चूंकि irb आपके Gemfile को अनदेखा करता है, Gemfile.lock के अंदर के वर्जन मायने नहीं रखते। irb उस जेम का नवीनतम वर्जन लोड करेगा जो वह ढूंढ सकता है:

~/Source/testapps/consoles[master *] jweiss$ gem list rails
*** LOCAL GEMS ***
rails (4.2.0.beta2, 4.2.0.beta1, 4.1.5, 4.1.1)
~/Source/testapps/consoles jweiss$ cat Gemfile | grep rails
gem 'rails', '4.1.5'
~/Source/testapps/consoles jweiss$ irb
irb(main):001:0> require 'rails'
=> true
irb(main):002:0> Rails.version
=> "4.2.0.beta2"

यदि आप इसकी उम्मीद नहीं कर रहे हैं तो यह आपके कोड के साथ वास्तव में अजीब समस्याएं पैदा कर सकता है।

irb बहुत अच्छा है यदि आप कोर रूबी फाइलों के साथ छेड़छाड़ कर रहे हैं। यह तेज़ है, और इसे किसी सेटअप की आवश्यकता नहीं है।

लेकिन यदि आप कंसोल चलाते समय अपने Gemfile का उपयोग करना चाहते हैं, तो इसके बजाय bundle exec irb चलाएं। bundle exec irb को उन जेम्स को लोड करने की अनुमति देता है जिन्हें बंडलर जानता है, और केवल वे जेम्स जिन्हें बंडलर जानता है:

~/Source/testapps/consoles jweiss$ bundle exec irb
irb(main):001:0> require 'rails'
=> true
irb(main):002:0> Rails.version
=> "4.1.5"

हमें ठीक वही रेल्स वर्जन मिला जिसकी हम तलाश कर रहे थे।

bundler/setup बनाम Bundler.require

आप bundle exec irb के बजाय bundle console कब चलाएंगे?

bundle exec irb चीजों को सेट करता है ताकि आप केवल अपने Gemfile.lock में मौजूद जेम्स को रिक्वायर कर सकें।

bundle console एक कदम आगे जाता है। जब आप bundle console चलाते हैं, तो आपको अपने Gemfile में मौजूद जेम्स को रिक्वायर करने की भी आवश्यकता नहीं होती। वे पहले से ही आपके लिए रिक्वायर्ड होते हैं:

~/Source/testapps/consoles jweiss$ bundle exec irb
irb(main):001:0> Rails.version
NameError: uninitialized constant Rails
from (irb):1
from /usr/local/bin/irb:11:in `
' ~/Source/testapps/consoles jweiss$ bundle console irb(main):001:0> Rails.version => "4.1.5"

आप bundle exec irb कंसोल के अंदर Bundler.require कॉल करके भी यह व्यवहार प्राप्त कर सकते हैं। आपके Gemfile में कोई भी जेम जिसे require: false मार्क नहीं किया गया है, स्वचालित रूप से रिक्वायर्ड हो जाएगा, और आप बिना किसी अतिरिक्त काम के इसका उपयोग कर पाएंगे। जब आप Gemfile वाले प्रोजेक्ट्स पर काम कर रहे हों, तो यह अविश्वसनीय रूप से सुविधाजनक है।

रेल्स तक पहुंच

अभी भी एक अंतर के बारे में सोचना है: bundle console और rails console।

~/Source/testapps/consoles jweiss$ bundle console
irb(main):001:0> Rails.application
=> nil
~/Source/testapps/consoles jweiss$ rails console
Loading development environment (Rails 4.1.5)
irb(main):001:0> Rails.application
=> #<Consoles::Application:0x007f8db4d5ab30 @_all_autoload_paths=["/Users/jweiss...

bundle console सिर्फ एक गुच्छा जेम्स रिक्वायर करता है। rails console उन जेम्स को रिक्वायर करता है, लेकिन यह आपके पूरे रेल्स एनवायरनमेंट को भी लोड करेगा, ऑटोलोडिंग सेट करेगा, आपके एप्लिकेशन को इनिशियलाइज़ करेगा, और आपको खेलने के लिए एक पूर्ण रेल्स एनवायरनमेंट देगा।

आप bundle console से रेल्स कंसोल जैसा कुछ प्राप्त कर सकते हैं यदि आप config/environment.rb रिक्वायर करते हैं:

~/Source/testapps/consoles jweiss$ bundle console
irb(main):001:0> Rails.application
=> nil
irb(main):002:0> require_relative 'config/environment.rb'
=> true
irb(main):003:0> Rails.application
=> #<Consoles::Application:0x007fd264f0b7c8 @_all_autoload_paths=["/Users/jweiss...

प्रत्येक, बस थोड़ा अधिक जटिल

तो, संक्षेप में:

  • irb बेसिक रूबी कंसोल है। यह आपके Gemfile को अनदेखा करता है, और केवल कोर रूबी क्लासेस बिना require किए सुलभ हैं। यह उन जेम्स को आसानी से लोड नहीं कर सकता जिन्हें बंडलर RubyGems के लोड पथ के बाहर इंस्टॉल करता है।

  • bundle exec irb irb जैसा है, यदि आपने bundler/setup भी रिक्वायर किया होता। आप केवल अपने Gemfile.lock में मौजूद जेम्स को आसानी से रिक्वायर कर सकते हैं, लेकिन आप उन जेम्स को लोड कर सकते हैं चाहे बंडलर ने उन्हें कहीं भी रखा हो।

  • bundle console bundle exec irb जैसा है, यदि आपने Bundler.require भी कॉल किया होता। आपके Gemfile में सभी जेम्स, require: false मार्क किए गए को छोड़कर, बिना रिक्वायर किए उपयोग किए जा सकते हैं। यह वास्तव में सुविधाजनक है जब आप अपने खुद के जेम्स लिख रहे हों, या नॉन-रेल्स कोड पर काम कर रहे हों।

  • rails console रेल्स ऐप के अंदर bundle console चलाने जैसा है, यदि आपने config/environment.rb भी रिक्वायर किया होता। आप अपने पूरे रेल्स ऐप के साथ खेल सकते हैं, ऑटोलोड्स और डेटाबेस कनेक्शन काम करते हैं, और सब कुछ उस तरह से हुक अप होता है जैसा आप उम्मीद करेंगे। यदि आप रेल्स ऐप में काम कर रहे हैं, तो यह सबसे उपयोगी प्रकार का कंसोल है।

इन कंसोल्स के बीच बहुत अधिक अंतर नहीं हैं। और जबकि उन अंतरों में से अधिकांश बहुत बड़े नहीं होंगे (ओह, यह फाइल रिक्वायर्ड नहीं है? बेहतर रिक्वायर करें!), अन्य पूरी तरह से क्रोधित करने वाले होंगे यदि आप नहीं जानते कि क्या हो रहा है। (यह रेक का गलत वर्जन फिर से क्यों लोड हो रहा है!?)

लेकिन यदि आप इनमें से प्रत्येक कंसोल के पीछे के विचार को जानते हैं, तो आप सही समय पर सही प्रकार के कंसोल का उपयोग कर पाएंगे। और जब आपको उनकी आवश्यकता होगी तो सभी लाइब्रेरीज़ आपके पास होंगी।

  1. MBR बनाम GPT समझाया: अपने PC के लिए सही पार्टीशन स्कीम कैसे चुनें MBR बनाम GPT समझाया: अपने PC के लिए सही पार्टीशन स्कीम कैसे चुनें

    अगर आप PC बना रहे हैं, तो आपसे पूछा गया होगा कि आप अपना ऑपरेटिंग सिस्टम कैसे इंस्टॉल करना चाहते हैं – MBR या GPT? MBR और GPT पार्टीशन के बीच अंतर काफी सीधे हैं। लेकिन बहुत सारी पृष्ठभूमि जानकारी है जो आपको प्रत्येक प्रकार की पार्टीशन टेबल के बारे में स्पष्ट तस्वीर प्राप्त करने में मदद करेगी, और आपको

  1. OneDrive बनाम OneDrive for Business: मुख्य अंतर समझाया गया OneDrive बनाम OneDrive for Business: मुख्य अंतर समझाया गया

    Microsoft की OneDrive क्लाउड स्टोरेज सर्विस आपको जहां भी हों, अपनी फाइलों तक पहुंचने देती है। कंपनी वास्तव में OneDrive के दो अलग-अलग लेकिन समान नाम वाले संस्करणों को बनाए रखती है। चाहे आप OneDrive या अलग OneDrive for Business का उपयोग करें, इस बात पर निर्भर करता है कि आप क्लाउड में क्या सेव करेंगे

  1. Windows 10 Home बनाम Pro: मुख्य अंतर समझाया गया Windows 10 Home बनाम Pro: मुख्य अंतर समझाया गया

    चाहे आप एक नए डिवाइस को देख रहे हों या Windows खुद खरीद रहे हों, Windows 10 Home और Pro के बीच अंतर के प्रति सचेत रहना अच्छा है। जब किसी को इंगित नहीं किया जाता है, तो मान लें कि आप अपने उत्पाद के साथ Windows 10 Home प्राप्त कर रहे हैं। नामकरण शायद थोड़ा अनुपयोगी है जिसमें Home संस्करण को अधिक उपयु