2013-03-23 9 views
68

Ich bin neu in Ruby und versuche, meinen Kopf um folgende Konzepte zu wickeln: Bundler vs RVM vs Gems vs RubyGems vs Gemsets vs System reiben und ich bin verwirrt.Bundler vs RVM vs Gems vs RubyGems vs Gemsets vs System Ruby

Kann jemand bitte beschreiben eine 'Best Practice', wie ich das alles auf einer neuen Installation der neuesten Version von Ubuntu verwalten soll? Was sollte ich installieren und wie sollte ich alles nutzen?

Ich vermute, dass eine sudo apt-get install ruby ist nicht zu empfehlen, aber ich bin mir nicht sicher. Ich habe es auf meinem System zusätzlich zu all den anderen Ruby-Sachen ausprobiert. Es fügt nur meine Verwirrung hinzu. Ich spreche nicht über Rails, sondern nur normale Ruby-Edelsteine ​​(z. B. Vagrant, Chef, Skripte).

Antwort

127

Wie in der vorherigen Antwort, dies ist eine ganze Menge zu decken, so betrachten Sie dies eine kurze Einführung.

gems sind die Art und Weise wie Ruby-Bibliotheken verpackt sind. Sie sind Ruby welche Gläser zu Java sind. In einer Gem-Datei finden Sie Ruby-Code (.rb-Dateien), aber auch Tests und eine spezielle Datei, die Informationen über den Edelstein selbst enthält, wie Name, Abhängigkeiten und Version (gemspec). Jedes Ruby-Projekt kann die benötigten Edelsteine ​​über eine Gemfile definieren, die nur Abhängigkeiten deklarieren muss. Rubygems ist der Name des Paketmanagers - das Werkzeug, das zum Installieren der Pakete verwendet wird (während die Edelsteine ​​die Pakete selbst sind). Rubygems gehört jetzt zu Ruby.

Bundler ist, was die Verwaltung von Edelsteinen erträglich macht. Basierend auf Ihrer Gemfile wird ein einfacher Aufruf an Bundler mit bundle install herunterladen und installieren Sie alle erforderlichen Edelsteine. Wenn Sie den Standard-Befehl "Gem" verwenden, müssen Sie diese manuell unter Verwendung von gem install <gem_name> installieren.Bundler ist nicht Teil von Ruby (es ist selbst packaged as a gem), 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 nicht zu benutzen, tatsächlich).

RVM ist ein Tool, mit dem Sie mehrere Versionen von Ruby auf einer Maschine installieren und bei Bedarf zwischen diesen wechseln können. Dies kann verwendet werden, um sowohl einen Ruby 1.8 und 1.9 oder sogar ein "MRI" (Matz's Ruby, die Standardimplementierung) und Alternativen (wie JRuby oder Rubinius) zu installieren. Beachten Sie, dass RVM in diesem Feld nicht allein ist, siehe zum Beispiel rbenv.

Ein gemset in RVM ist eine Reihe von Edelsteinen, die für einen bestimmten Kontext, in der Regel ein Projekt, spezifisch sind. Dies ist nützlich, wenn Sie beispielsweise verschiedene Anwendungen mit jeweils eigenen Sets von Edelsteinen entwickeln und diese getrennt halten möchten.

system Ruby ist, wenn RVM verwendet wird, die Ruby-Version, die auf der Maschine installiert ist (dh nicht über RVM).

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

+1

Gute Antwort, könnten Sie bitte klären: Was ist der Unterschied zwischen Edelsteinen und RubyGems? Und zwischen Gemspec und Gemfile? Auch welche der oben aufgelisteten Programme (z. B. Bundler) sind in "Ruby" enthalten und welche sind separate Anwendungen (ich glaube RVM ist getrennt)? Und ist Gemset nur ein Konzept nur innerhalb von RVM oder ist es auch innerhalb von Ruby Kern (oder andere Dinge, wie Rbenv in der anderen Antwort erwähnt)? Und wenn Bundler das Verwalten von Edelsteinen erleichtert, was war der Vorbund dafür? (Wie würden Sie Edelsteine ​​ohne Bündler verwalten, nur damit ich weiß, auch wenn ich es nie so machen würde.) Danke! – user779159

+0

entsprechend aktualisiert. – Martin

+0

Also Rubygems ist der Name des Paketmanagers, den Sie mit dem 'Gem' Befehl aufrufen? Und ist Bundler auch Teil von Ruby selbst, genau wie Rubygems, oder muss ich es irgendwie einbeziehen? – user779159

1

Sie fragen in einer Frage nach mehr Informationen als für Stack Overflow. Um alles abzudecken, würde ein Buch brauchen.

Unter Ubuntu ist es einfach, Edelsteine ​​in der "System" -Version von Ruby zu installieren und zu entfernen, also gewöhnt euch daran, normale Edelsteine ​​über sudo zu installieren und zu entfernen. (Unter Mac OS würde ich andere Ratschläge geben, weil Apple Ruby für den eigenen Gebrauch bündelt und es keine gute Idee ist, sich damit herumzuärgern.) Dann, wenn Sie eine Idee haben, wie die ganze Edelstein-Idee funktioniert, und Sie wissen, dass Sie mehrere wollen Ruby-Versionen auf Ihrem System, versuchen Sie "rbenv" oder "RVM" und installieren Sie eine Version oder zwei in Ihrer Sandbox.

Linux macht es einfach, Ruby über eine Distribution hinzuzufügen/zu entfernen, aber wir sind auf die Versionen beschränkt, die die Distro-Betreuer verpackt haben, deshalb installiere ich normalerweise von der Quelle. Aber das ist ein Problem, wenn mehrere Versionen von Ruby für Entwicklungs-, Test- und Produktionssysteme verwaltet werden, weshalb rbenv und RVM erfunden wurden - sie behandeln das schmutzige Detail, was uns erlaubt, uns auf die Programmierung zu konzentrieren.

Ich habe sowohl rbenv als auch RVM verwendet und rbenv in den letzten sechs Monaten oder so verwendet, mit guten Ergebnissen. Es ist weniger kompliziert als RVM, die ich mag. In jedem Fall erleichtern sie die Installation verschiedener Versionen mit separaten Sets von Gems. 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, dass man nacheinander Änderungen vornimmt, was zum Lernen des Programmierens oder Erlernens einer neuen Sprache zutrifft. Lass dich nicht ablenken, behalte es einfach.