Bundler vs RVM vs Gems vs RubyGems vs Gemsets vs System Ruby [geschlossen]

102

Ich bin neu in Ruby und versuche, mich mit folgenden Konzepten zu beschäftigen: Bundler vs RVM vs Gems vs RubyGems vs Gemsets vs System Rub und ich bin verwirrt.

Kann jemand bitte eine "Best Practice" beschreiben, wie ich all dies bei einer Neuinstallation der neuesten Version von Ubuntu verwalten soll? Was soll ich installieren und wie soll ich alles verwenden?

Ich vermute, dass sudo apt-get install rubyes nicht empfehlenswert ist, a zu machen, aber ich bin mir nicht sicher. Ich habe es auf meinem System zusätzlich zu 'all den anderen Ruby-Sachen' versucht. Es trägt nur zu meiner Verwirrung bei. Ich spreche nicht von Rails, sondern nur von normalen Ruby-Edelsteinen (z. B. Vagrant, Chef, Skripte).

user779159
quelle

Antworten:

184

Wie aus der vorherigen Antwort hervorgeht, ist dies ziemlich viel zu behandeln. Betrachten Sie dies als eine kurze Einführung.

Edelsteine sind die Art und Weise, wie Ruby-Bibliotheken verpackt werden. Sie sind für Ruby das, was Gläser für Java sind. In einer Gem-Datei finden Sie Ruby-Code (.rb-Dateien), aber auch Tests sowie eine spezielle Datei mit Informationen zum Gem selbst, wie z. B. Name, Abhängigkeiten und Version ( gemspec ). Jedes Ruby-Projekt kann die benötigten Edelsteine ​​über eine Gem-Datei definieren , die nur Abhängigkeiten deklarieren muss. Rubygems ist der Name des Paketmanagers - des Tools, mit dem die Pakete installiert werden (während die Edelsteine ​​die Pakete selbst sind). Rubygems ist jetzt Teil von Ruby.

Bundler macht das Management von Edelsteinen erträglich. Basierend auf Ihrer Gemfile werden durch einen einfachen Aufruf des Bundlers mithilfe der Bundle- Installation alle erforderlichenGemsheruntergeladen und installiert. Mit dem Standardbefehl gem müssten Sie jeden manuell mit installierengem install <gem_name>. Bundler ist nicht Teil von Ruby (es ist selbst als Juwel verpackt ), aber es ist ein "De-facto-Standard" für die meisten Anwendungen (Sie werden nicht viele Leute finden, die es nicht verwenden, und keine guten Gründe, es tatsächlich nicht zu verwenden).

RVM ist ein Tool, mit dem Sie mehrere Ruby-Versionen auf einem Computer installieren und bei Bedarf zwischen diesen wechseln können. Dies kann verwendet werden, um sowohl Ruby 1.8 als auch 1.9 oder sogar eine "MRT" (Matz's Ruby, die Standardimplementierung) und Alternativen (wie JRuby oder Rubinius) zu installieren. Beachten Sie, dass RVM in diesem Feld nicht allein ist, siehe z. B. rbenv .

Ein Gemset in RVM ist ein Satz von Gems, die für einen bestimmten Kontext spezifisch sind, normalerweise ein Projekt. Dies ist nützlich, wenn Sie beispielsweise verschiedene Anwendungen mit jeweils eigenen Edelsteinen entwickeln und diese getrennt halten möchten.

System Ruby ist bei Verwendung von RVM die auf dem Computer installierte Ruby-Version (dh nicht über RVM).

Wenn Sie gerade erst anfangen, sind Edelsteine ​​und Bündler für Sie von Interesse. Sie können RVM und Edelsteine ​​vorerst beiseite lassen.

Martin
quelle
1
Gute Antwort, könnten Sie bitte klarstellen: Was ist der Unterschied zwischen Edelsteinen und RubyGems? Und zwischen gemspec und Gemfile? Welche dieser oben aufgeführten Programme (z. B. Bundler) sind in 'Ruby' enthalten und welche sind separate Anwendungen (ich glaube, RVM ist separat)? Und ist gemset nur ein Konzept nur innerhalb von RVM oder auch innerhalb von Ruby (oder anderen Dingen, wie rbenv, die in der anderen Antwort erwähnt wurden)? Und wenn Bundler das Verwalten von Edelsteinen vereinfacht, wie war dies vor dem Bundler? (dh wie würden Sie Edelsteine ​​ohne Bündler verwalten, nur damit ich weiß, auch wenn ich es niemals so machen würde.) Danke!
user779159
Rubygems ist also der Name des Paketmanagers, den Sie mit dem Befehl 'gem' aufrufen? Und ist Bundler auch Teil von Ruby selbst, genau wie Rubygems, oder muss ich es irgendwie einbinden?
user779159
2
"Wenn Sie gerade erst anfangen ... können Sie RVM ... vorerst beiseite lassen." Sofern Sie nicht unter OS X arbeiten und das Ruby-Projekt, das Sie installieren und ausführen möchten, von einer späteren Version von Ruby abhängt als der, die auf dem Betriebssystem vorinstalliert ist. Dann benötigen Sie RVM.
Hephaistos
Dies ist nicht wahr: "Mit dem Standardbefehl gem müssten Sie jeden manuell installieren." Sie können definitiv alle Edelsteine ​​in Ihrer Gem-Datei mit einem einzigen Befehl "gem install" installieren
Andy
1

Sie fordern in einer Frage mehr Informationen an, als für den Stapelüberlauf vorgesehen sind. Um alles abzudecken, würde man ein Buch brauchen.

Unter Ubuntu ist es einfach, Edelsteine ​​in der "System" -Version von Ruby zu installieren und zu entfernen. Gewöhnen Sie sich also daran, reguläre Edelsteine ​​über zu installieren und zu entfernen sudo. (Unter Mac OS würde ich andere Ratschläge geben, da Apple Ruby für den eigenen Gebrauch bündelt und es keine gute Idee ist, sich damit zu beschäftigen.) Wenn Sie dann eine Idee haben, wie die gesamte Edelsteinidee funktioniert, und wissen, dass Sie mehrere möchten Ruby-Versionen auf Ihrem System, versuchen Sie " rbenv " oder " RVM " und installieren Sie eine oder zwei Versionen in Ihrer Sandbox.

Linux macht es einfach, Ruby über eine Distribution hinzuzufügen / zu entfernen, aber wir beschränken uns auf die Versionen, die die Distributionsbetreuer gepackt haben, daher installiere ich normalerweise von der Quelle. Bei der Verwaltung mehrerer Ruby-Versionen für Entwicklungs-, Test- und Produktionssysteme ist dies jedoch ein Problem. Deshalb wurden rbenv und RVM erfunden. Sie behandeln die schmutzigen Details, sodass wir uns auf die Programmierung konzentrieren können.

Ich habe sowohl rbenv als auch RVM verwendet und benutze rbenv seit ungefähr sechs Monaten mit guten Ergebnissen. Es ist weniger kompliziert als RVM, was ich mag. In beiden Fällen ist es einfach, verschiedene Versionen mit separaten Edelsteinsätzen zu installieren. Wenn Sie möchten, können Sie verschiedene Ruby-Versionen in verschiedenen Terminalfenstern öffnen, um die Kompatibilität zu testen.

Regel eins beim Debuggen ist, Änderungen nacheinander vorzunehmen, was für das Erlernen des Programmierens oder das Erlernen einer neuen Sprache gilt. Lass dich nicht ablenken, halte es einfach.

der Blechmann
quelle
1
Verwenden Sie niemals einen anderen Paketmanager als Ihren Standard-Systempaketmanager (z. B. apt oder apt-get). Sie werden Ihr System unweigerlich durcheinander bringen.
Bild