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).

user779159
źródło

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.

Jaskółka oknówka
źródło
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ę.

Blaszany Człowiek
źródło
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