2012-05-03 19 views
5

Bu soru, bundler, rubygems & ile ilgili soru, aradığım yöntemi nasıl anlar. Oldukça uzun, lütfen benimle birlikte ol.Paketleyici nasıl çalışır?

benim anlayış gereğince, Bundler yakut için taşlar yönetmek için bir bağımlılık yönetim aracıdır. & tüm mücevherlerini Gemfile'da listelenen bağımlılıklarını yükler.

Sormak istediğim soru en iyi örnek olarak gösterilebilir. işte -> Benim raylar app benim denetleyicisi yapıyorum: -

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

Burada iki şey yapıyorum:

  1. Surveyor mücevher dan SurveyorControllerMethods ekleyin.
  2. Burada süper kullanıldığı gibi, gayet güzel çalışıyor SurveyorControllerMethods den create yöntemini çağırır ama bunu anlamıyorum.

ve mücevher şaşırtıcı yakut en $LOAD_PATH mevcut değildir

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

yüklenir. böylece soru şudur:

  1. nasıl hatta çalışır?
  2. Takımı kullanarak bir gem yükleme, yükleme sırasında sahnelerin arkasında ne olur?
  3. biz bile henüz/eklemek zorunda bizim kod & onları çağırmak olmayan jquery-rails ex bazı taşlar vardır, jQuery JavaScript dosyası otomatik olarak dahil edilir. Onun büyüsü olmadığını biliyorum, bu nasıl çalışıyor?

cevap

2

Onlar anahtar Raylar kutudan nasıl ayarlandığını aslında. Ayrıca Rails'in daha büyük projelere başlamak için çok yavaş olmasının nedenlerinden biri de. [1]

require 'bunder/setup' 

ve application.rb üstündeki bulacaksınız: boot.rb olarak

bulacaksınız

Bundler.require(:default, :development) 

Bu son yöntem çağrısı senin Gemfile geri bakar, Daha sonra verilen grupta (yukarıda :default ve :development) olarak taşlar her dolaşır. Daha sonra, varsayılan öğenin yüklenmesi gereken, genellikle gem adı olan, ancak bir :require seçeneği ile de belirtilebilen bir saplama alır. Bundler'da, "_" yerine "-" işlenmesi gibi bazı yerleşik adlandırma kural istisnaları vardır.

Bundler sonra sadece sırayla (genellikle) mücevher içindeki dosyaları yükler taş, birincil dosyayı yükler.

'bundler/setup' dosya yükleme yolu ilgilenir ki, Bundler.setup gerçekleştirir. Her bir mücevher için $LOAD_PATH'a (vites değiştirmeden) önkoşul yapar.Bu yük yollarının ne olması gerektiğine dair gerçek bilgiler rubygems'ten geliyor.

yılında kaynağında bir göz atın:

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

[1]: Ne zaman Yeni bir Rails projesi başlatırsanız, muhtemelen Bundler.require satırını silerseniz ve sadece ihtiyaç duyulduğunda değerli taşlara ihtiyaç duyarsanız, zamanla bu kadar yavaş olmaz.

+0

'Bundler.setup (: default,: development)' 'config/boot.rb' veya' config/application.rb' içinde bulamıyorum? – CuriousMind

+0

Oops, özür dilerim, dolaylı olarak https://github.com/carlhuda/bundler/blob/master/lib/bundler/setup.rb adresindeki 'bundler/setup' gerektirir – d11wtq