2012-05-03 15 views
5

To pytanie dotyczy bundler, rubygems & jak to się dowiedzieć, z której metody dzwonię. Jest dość długi, więc proszę o zachowanie mnie.Jak działa bundler?

Zgodnie z moim rozumieniem Bundler to narzędzie do zarządzania zależnościami w zarządzaniu klejnotami dla ruby. Instaluje wszystkie klejnoty & ich zależności wymienione w Gemfile.

Pytanie, które chcę zadać, najlepiej ilustruje przykład. więc tutaj -> W mojej aplikacji szyn Robię to w moim kontrolera: -

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

Tutaj robię dwie rzeczy:

  1. Dołącz SurveyorControllerMethods z Surveyor gem.
  2. Jak Użyłem super- tutaj, byłoby nazwać create metodę z SurveyorControllerMethods który działa dobrze, ale nie zrozumieć.

a gem jest zainstalowany na

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

który nieoczekiwanie nie jest obecny w Ruby $LOAD_PATH. więc pytanie jest:

  1. jak to działa?
  2. Zainstaluj klejnot za pomocą pęta, co dzieje się za kulisami podczas instalacji?
  3. Istnieje kilka klejnotów ex jquery-rails, do których nawet nie musimy dołączać/wywoływać ich w naszym kodzie &, jednak plik JavaScript jQuery jest automatycznie dołączany. Wiem, że to nie magia, więc jak to działa?

Odpowiedz

2

Kluczowe znaczenie ma sposób skonfigurowania Railsów po wyjęciu z pudełka. Co jest również jednym z powodów, dla których Railsy są tak powolne, aby zacząć na większych projektach. [1]

W boot.rb znajdziesz:

require 'bunder/setup' 

i na górze environment.rb znajdziesz:

Bundler.require(:default, :development) 

Ta ostatnia metoda wygląda na wezwanie z powrotem do Gemfile, następnie iteruje wszystkie klejnoty znajdujące się w podanych grupach (:default i). Następnie podejmuje decyzję o tym, jaki plik domyślny powinien zostać załadowany, zwykle jest to nazwa klejnotu, ale może być również określony przez opcję :require. Bundler ma również kilka wbudowanych wyjątków dotyczących nazewnictwa, takich jak obsługa "-" zamiast "_".

Bundler po prostu ładuje główny plik dla klejnotu, który z kolei (zazwyczaj) ładuje pliki wewnątrz klejnotu.

Plik 'bundler/setup' wykonuje Bundler.setup, który zajmuje się ścieżką obciążenia. Zaczyna się (nie zmienia) na $LOAD_PATH dla każdego klejnotu.Rzeczywiste informacje o tym, jakie powinny być ścieżki ładowania, pochodzą od rubygemów.

Spójrz na źródła w:

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

[1]: Kiedy Zaczynasz nowy projekt Railsowy, prawdopodobnie z czasem go zwolnisz, jeśli usuniesz linię Bundler.require i po prostu potrzebujesz klejnotów, które są potrzebne.

+0

Nie mogę znaleźć 'Bundler.setup (: default,: development)' w 'config/boot.rb' lub' config/application.rb'? – CuriousMind

+0

Ups, przepraszam, wymaga 'bundler/setup', co robi to pośrednio https://github.com/carlhuda/bundler/blob/master/lib/bundler/setup.rb – d11wtq

Powiązane problemy