2012-09-08 15 views
6

Mam gita sklonowanego na repozytorium Githuba, teraz chcę z nim eksperymentować, tak jak chcę zagrzebać kod i zepsuć go. Stworzyłem plik test.rb, który powinien załadować ten klejnot, ale chcę załadować moją lokalnie sprawdzoną wersję, jaki jest właściwy sposób, aby to zrobić?Jak załadować klejnot ze źródła?

W tej chwili używam tylko grona "require_relative 'the_gem_name/lib/file'", co jest niewłaściwe.

+0

Po prostu użyj 'require 'gemname'' jeśli utworzyłeś' test.rb' w katalogu gem. –

+0

czy masz plik gem? – apneadiving

+0

Chciałbym utworzyć test.rb poza katalogiem gem, jeśli to możliwe. I nie mam pliku gemfile. – foobar

Odpowiedz

8

Po wykonaniu require 'foo' Ruby sprawdza wszystkie katalogi w ścieżce ładowania pliku foo.rb i wczytuje pierwszą znalezioną. Jeśli nie zostanie znaleziony plik o nazwie foo.rb, a Ty jesteś , a nie za pomocą Rubygems, zostanie podniesiona LoadError.

Jeśli użyciu Rubygems (co jest prawdopodobne, zważywszy, że to jest wliczone w Ruby 1.9+), a następnie zamiast natychmiast podnosząc LoadError wszystkie zainstalowane Gems są przeszukiwane, aby zobaczyć, jeśli jeden zawiera plik foo.rb. Jeśli taki Klejnot zostanie znaleziony, zostanie dodany do ścieżki ładowania i plik zostanie załadowany.

Możesz samodzielnie manipulować ścieżką ładowania, jeśli chcesz upewnić się, że używana jest określona wersja biblioteki. Zwykle nie jest to coś, co jest zalecane, ale jest to sytuacja, w której chcesz to zrobić.

Istnieją dwa sposoby dodawania katalogów do ścieżki ładowania. Po pierwsze można zrobić to w rzeczywisty kod, za pomocą $LOAD_PATH (lub $:) zmiennej globalnej:

$LOAD_PATH.unshift '/path/to/the/gems/lib/' 
require 'the_gem' 

pamiętać, że zazwyczaj chcesz dodać lib dir gem, a nie najwyższego poziomu reż gem (w rzeczywistości może się to różnić w zależności od rzeczywistego klejnotu, i można dodać więcej niż jeden katalog, ale normą jest lib).

Innym sposobem jest użycie przełącznika wiersza polecenia -I do ruby wykonywalnego:

$ ruby -I/path/to/the/gems/lib/ test.rb 

ten sposób mogłyby być czystsze bit, jak zwykle nie chcą być brudząc ze ścieżką od obciążenia wewnątrz twojego kodu, ale jeśli tylko testujesz bibliotekę, prawdopodobnie nie ma to większego znaczenia.

+0

Należy zauważyć, że można sprawdzić gemspec, aby upewnić się, że lib jest jedyną określoną [wymaganą ścieżką] (http://guides.rubygems.org/specification-reference/#require_paths). W ten sposób klejnot informuje Rubygems, gdzie ma wyglądać, kiedy wymaga pliku. –

+0

+1 To świetne rozwiązanie podczas budowania klejnotu i spożywania go w tandemie z innego projektu, jak ja. – ashes999

+0

'-I' było najlepsze. Po prostu użyłem '--gem' z' pry', aby szybko przetestować moje zmiany! – Pysis

2

Po sugestii apneadiving w komentarzach, stworzyłem Gemfile i dodaje ten wiersz

source "http://rubygems.org" 

gem 'gem_name', path: '~/path/to/gem/source/folder' 

Następnie bundle install i bundle exec ruby test.rb i to działało.

Powiązane problemy