2012-05-03 18 views
5

यह प्रश्न बंडलर के बारे में है, rubygems & यह कैसे पता लगाता है कि मैं किस विधि को बुला रहा हूं। यह काफी लंबा है, तो कृपया मेरे साथ भालू।बंडलर कैसे काम करता है?

मेरी समझ के अनुसार, बंडलर रूबी के लिए रत्नों के प्रबंधन के लिए एक निर्भरता प्रबंधन उपकरण है। यह सभी रत्न & Gemfile में सूचीबद्ध उनकी निर्भरताओं को स्थापित करता है।

प्रश्न जो मैं पूछना चाहता हूं उसे एक उदाहरण से सबसे अच्छा चित्रित किया जा सकता है। इसलिए यहाँ -> मेरी रेल ऐप्लिकेशन में मैं अपने नियंत्रक में यह कर रहा हूं: -

module SurveyorControllerCustomMethods 
    def create 
    super 
    end 
end 
class SurveyorController < ApplicationController 
    include Surveyor::SurveyorControllerMethods 
end 

यहाँ, मैं दो बातें कर रहा हूँ:

  1. शामिल करें सर्वेयर मणि से SurveyorControllerMethods
  2. मैं सुपर यहाँ का इस्तेमाल किया है, यह SurveyorControllerMethods जो सिर्फ ठीक काम करता है से create विधि कहेंगे लेकिन मैं यह समझ में नहीं आता।

और मणि

$ bundle show surveyor 
/home/gaurish/.rvm/gems/ruby-1.9.3-p194/gems/surveyor-0.22.0 

कौन सा आश्चर्यजनक रूप से गहरे लाल रंग का के $LOAD_PATH में मौजूद नहीं है पर स्थापित किया गया है। तो सवाल यह है:

  1. यह कैसे काम करता है?
  2. बंडलर का उपयोग करके एक मणि स्थापित करें, इंस्टॉल के दौरान दृश्यों के पीछे क्या होता है?
  3. कुछ रत्न पूर्व jquery-rails हैं जिसके लिए हमें अभी भी हमारे कोड & में शामिल/कॉल करने की आवश्यकता नहीं है, jQuery जावास्क्रिप्ट फ़ाइल स्वचालित रूप से शामिल है। मैं इसे जादू नहीं जानता, तो यह कैसे काम करता है?

उत्तर

2

वे कुंजी वास्तव में बॉक्स के बाहर रेल कैसे स्थापित की जाती है। बड़ी परियोजनाओं पर शुरू होने के लिए रेल इतनी धीमी गति से कारणों में से एक है। [1]

boot.rb में आप मिल जाएगा:

require 'bunder/setup' 

और application.rb के शीर्ष पर आपको:

Bundler.require(:default, :development) 

यह पिछले विधि कॉल अपने Gemfile वापस करने के लिए लग रहा है, फिर उपरोक्त में दिए गए समूहों (:default और :development) में दिए गए रत्नों के सभी पुनरावृत्त करते हैं)। यह निर्धारित करने के लिए एक स्टैब लेता है कि डिफ़ॉल्ट फ़ाइल क्या लोड की जानी चाहिए, जो आम तौर पर मणि नाम है, लेकिन :require विकल्प द्वारा भी निर्दिष्ट किया जा सकता है। बंडलर में कुछ अंतर्निहित नामकरण सम्मेलन अपवाद भी हैं, जैसे कि "_" के बजाय "-" की हैंडलिंग।

बंडलर फिर मणि के लिए प्राथमिक फ़ाइल लोड करता है, जो बदले में (आमतौर पर) मणि के अंदर फ़ाइलों को लोड करता है।

'bundler/setup' फ़ाइल Bundler.setup निष्पादित करती है, जो भार पथ का ख्याल रखती है। यह प्रत्येक मणि के लिए $LOAD_PATH पर (unshifts) तैयार करता है।उन पथों को लोड करने के बारे में वास्तविक जानकारी rubygems से आनी चाहिए।

में स्रोत पर एक नज़र डालें:

https://github.com/carlhuda/bundler/blob/master/lib/bundler/setup.rb https://github.com/carlhuda/bundler/blob/master/lib/bundler/runtime.rb

[1]: जब आप एक नई रेल परियोजना शुरू करते हैं, आपको शायद यह पता चल जाएगा कि अगर आप बंडलर.रेक्वायर लाइन को हटाते हैं तो बस इतना धीमा नहीं होता है और जरूरी जवाहरात की आवश्यकता होती है।

+0

मुझे 'config/boot.rb' या' config/application.rb' में 'Bundler.setup (: डिफ़ॉल्ट,: विकास)' नहीं मिल रहा है? – CuriousMind

+0

ओह, मैं क्षमा चाहता हूं, इसे 'बंडलर/सेटअप' की आवश्यकता है, जो अप्रत्यक्ष रूप से ऐसा कर रहा है https://github.com/carlhuda/bundler/blob/master/lib/bundler/setup.rb – d11wtq

संबंधित मुद्दे