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

`Irb`, `Bundle Exec Irb`, `बंडल कंसोल` और `रेल कंसोल` में क्या अंतर है?

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

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

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

बंडलर बनाम गैर-बंडलर

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.require

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

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 `<main>'

~/Source/testapps/consoles jweiss$ bundle console
irb(main):001:0> Rails.version
=> "4.1.5"

यदि आप Bundler.require . को कॉल करते हैं, तो भी आपको यह व्यवहार मिल सकता है आपके bundle exec irb . के अंदर सांत्वना देना। आपके 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 require की आवश्यकता है :

~/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 like जैसा है , अगर आपको bundler/setup . की भी आवश्यकता है . आपको केवल उन रत्नों की आसानी से आवश्यकता हो सकती है जो आपके Gemfile.lock . में हैं , लेकिन आप उन रत्नों को लोड कर सकते हैं चाहे बंडलर ने उन्हें कहीं भी रखा हो।

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

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

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

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


  1. एमबीआर बनाम जीपीटी:एमबीआर विभाजन और जीपीटी विभाजन के बीच क्या अंतर है? [हल किया]

    यदि आप एक पीसी बना रहे हैं, तो आपसे पूछा जा सकता है कि आप अपने ऑपरेटिंग सिस्टम - एमबीआर या जीपीटी को कैसे स्थापित करना चाहते हैं? एमबीआर और जीपीटी विभाजन के बीच का अंतर बहुत सीधा है। लेकिन पृष्ठभूमि की बहुत सारी जानकारी है जो आपको प्रत्येक प्रकार की विभाजन तालिका के बारे में एक स्पष्ट तस्वीर प्राप्

  1. व्यवसाय के लिए OneDrive और OneDrive में क्या अंतर है?

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

  1. Windows 10 Home और Pro में क्या अंतर है?

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