Bundler vs RVM vs Gems vs RubyGems vs Gemsets vs System Ruby [zamknięte]


102

Jestem nowy w Rubim i próbuję omówić następujące koncepcje: bundler vs RVM vs gems vs RubyGems vs gemsets vs system rub i jestem zdezorientowany.

Czy ktoś mógłby opisać „najlepszą praktykę” dotyczącą tego, jak powinienem zarządzać tym wszystkim przy nowej instalacji najnowszej wersji Ubuntu? Co mam zainstalować i jak z tego wszystkiego korzystać?

Domyślam się, że robienie a sudo apt-get install rubynie jest zalecane, ale nie jestem pewien. Wypróbowałem to na swoim systemie oprócz „wszystkich innych rzeczy Rubiego”. To tylko pogłębia moje zamieszanie. Nie mówię o Railsach, ale zwykłych perełkach Ruby (np. Vagrant, Chef, skrypty).

Odpowiedzi:


185

Zgodnie z poprzednią odpowiedzią jest to dość dużo do omówienia, więc rozważ to krótkie wprowadzenie.

Klejnoty są sposobem pakowania bibliotek Ruby. Są dla Rubiego tym, czym słoiki dla Javy. W pliku gem znajduje się kod Ruby (pliki .rb), ale także testy i specjalny plik zawierający informacje o samym gemie, takie jak jego nazwa, zależności i wersja ( gemspec ). Każdy projekt Ruby może zdefiniować klejnoty, których potrzebuje, za pomocą pliku Gemfile, który musi tylko zadeklarować zależności. Rubygems to nazwa menedżera pakietów - narzędzia używanego do instalowania pakietów (podczas gdy klejnoty to same pakiety). Rubygems jest teraz częścią Rubiego.

Bundler jest tym, co sprawia, że ​​zarządzanie klejnotami jest znośne. W oparciu o twój plik Gemfile, proste połączenie z pakietem przy użyciu instalacji pakietu spowoduje pobranie i zainstalowanie wszystkich wymaganych klejnotów. Używając standardowego polecenia gem, musiałbyś zainstalować każdy z nich ręcznie, używającgem install <gem_name>. Bundler nie jest częścią Rubiego (sam jest zapakowany jako klejnot ), ale jest „de facto standardem” dla większości aplikacji (nie znajdziesz wielu ludzi, którzy go nie używają i nie ma dobrych powodów, aby go nie używać).

RVM to narzędzie umożliwiające zainstalowanie wielu wersji Ruby na komputerze, przełączając się między nimi w razie potrzeby. Można to wykorzystać do zainstalowania Rubiego 1.8 i 1.9, a nawet "MRI" (Matz's Ruby, domyślna implementacja) i alternatyw (takich jak JRuby lub Rubinius). Zauważ, że RVM nie jest sam w tym polu, patrz na przykład rbenv .

Zestaw kamieni w RVM to zestaw klejnotów specyficznych dla danego kontekstu, zazwyczaj projektu. Jest to przydatne, jeśli na przykład tworzysz różne aplikacje, z których każda ma własne zestawy klejnotów i chcesz je oddzielić.

system Ruby jest, kiedy używasz RVM, wersją Rubiego zainstalowaną na maszynie (tj. nie przez RVM).

Jeśli dopiero zaczynasz, interesują Cię klejnoty i pakiet. Na razie możesz odłożyć RVM i gemsets.


1
Dobra odpowiedź, czy mógłbyś wyjaśnić: Jaka jest różnica między klejnotami a RubyGemami? A między gemspec a Gemfile? Ponadto, które z tych programów (np. Bundler) wymienione powyżej są dołączone do „Ruby”, a które są oddzielnymi aplikacjami (uważam, że RVM jest oddzielny)? Czy gemset jest tylko koncepcją tylko w RVM, czy też jest w rdzeniu Rubiego (lub innych rzeczy, takich jak rbenv wspomniany w innej odpowiedzi)? A jeśli bundler ułatwia zarządzanie klejnotami, jaki był na to sposób przed sprzedażą? (tj. jak radziłbyś sobie z klejnotami bez pakietu, tak wiem, nawet gdybym nigdy nie zrobił tego w ten sposób.) Dzięki!
— user779159

Więc Rubygems to nazwa menedżera pakietów, którego wywołujesz poleceniem „gem”? Czy pakiet jest również częścią samego Rubiego, tak jak Rubygems, czy też muszę go jakoś dołączyć?
— user779159

2
„Jeśli dopiero zaczynasz… [y], możesz pozwolić RVM… na razie”. Chyba że korzystasz z systemu OS X, a projekt Ruby, który chcesz zainstalować i uruchomić, zależy od nowszej wersji Ruby niż ta, która jest wstępnie zainstalowana w systemie operacyjnym. Wtedy będziesz potrzebować RVM.
— Hefajstos

To nieprawda: „Używając standardowego polecenia gem, musiałbyś zainstalować każdy z nich ręcznie”. Zdecydowanie możesz zainstalować wszystkie klejnoty w swoim pliku gem za pomocą jednego polecenia „gem install”
— Andy

1

W jednym pytaniu prosisz o więcej informacji, niż jest to możliwe w przypadku przepełnienia stosu. Aby to wszystko opisać, potrzebna byłaby książka.

W Ubuntu łatwo jest zainstalować i usunąć klejnoty w „systemowej” wersji Rubiego, więc przyzwyczaj się do instalowania i usuwania zwykłych klejnotów za pośrednictwem sudo. (W przypadku Mac OS dałbym inną radę, ponieważ Apple pakuje Ruby na własny użytek i nie jest dobrym pomysłem, aby z nim zadzierać). Wtedy, kiedy masz pojęcie, jak działa cały pomysł na klejnot, i wiesz, że chcesz wiele Wersje Ruby w twoim systemie, spróbuj " rbenv " lub " RVM " i zainstaluj jedną lub dwie wersje w swoim piaskownicy.

Linux ułatwia dodawanie / usuwanie Rubiego za pośrednictwem dystrybucji, ale jesteśmy ograniczeni do wersji, które opiekunowie dystrybucji mają w pakiecie, więc zwykle instaluję ze źródła. Ale to jest uciążliwe przy zarządzaniu kilkoma wersjami Ruby dla systemów programistycznych, testowych i produkcyjnych, dlatego wynaleziono rbenv i RVM - zajmują się brudnymi szczegółami, pozwalając nam skoncentrować się na programowaniu.

Używałem zarówno rbenv, jak i RVM , i używam rbenv przez ostatnie sześć miesięcy, z dobrymi wynikami. To mniej skomplikowane niż RVM, który mi się podoba. W obu przypadkach ułatwiają instalację różnych wersji z oddzielnymi zestawami klejnotów. Jeśli chcesz, możesz mieć różne wersje Rubiego otwarte w różnych oknach terminala, co ułatwi testowanie zgodności.

Zasada pierwsza, kiedy debugowanie polega na wprowadzaniu zmian pojedynczo, co jest prawdziwe w przypadku nauki programowania lub uczenia się nowego języka. Nie rozpraszaj się, po prostu zachowaj prostotę.


1
Nigdy nie sudo żadnego menedżera pakietów innego niż domyślny menedżer pakietów systemu (np. Apt lub apt-get). Nieuchronnie zepsujesz swój system.
— obraz
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.