German (Deutsch) translation by Federicco Ancie (you can also view the original English article)
Sobald Sie von der Ruby-Entwicklung abhängig sind, möchten Sie mit verschiedenen Ruby-Versionen experimentieren. Auf den ersten Blick könnte man denken, dass es etwas schwierig ist. RVM macht dies zu einem Kinderspiel. In diesem Tutorial werde ich Sie mit RVM vertraut machen.
0 - Was ist RVM?
Ohne RVM ist es ziemlich schwierig, mehr als eine Version von Ruby auf Ihrem Computer zu haben.
RVM steht für Ruby EnVironment Manager. Hier ist die Idee. Als Ruby-Entwickler können Situationen auftreten, in denen Sie mehrere Ruby-Versionen verwenden müssen. Sie haben beispielsweise mit Ruby 1.8.6 begonnen, möchten aber jetzt mit 1.9.2 experimentieren. Normalerweise arbeiten Sie mit dem 1.9-Zweig, möchten jedoch einen Beitrag zu einem Open Source-Projekt leisten, das sich noch im 1.8-Zweig befindet.
Ohne RVM ist es ziemlich schwierig, mehr als eine Version von Ruby auf Ihrem Computer zu haben. Oder was ist, wenn Sie einen der alternativen Ruby-Interpreten wie Rubinius oder JRuby ausprobieren möchten? Wie können Sie eine Runde drehen, ohne auf Ihre originalgetreue MRT-Installation zu verzichten? Hier setzt RVM an. Es handelt sich im Grunde genommen um ein Framework, das mehrere Installationen von Ruby für Sie verwaltet und Ihnen das Wechseln zwischen diesen erleichtert.
Heute gelten zwei Einschränkungen:
-
Sie sollten mit der Befehlszeile ziemlich vertraut sein.
-
Sie sollten sich auf einem Unix-System befinden. Dies bedeutet, dass Sie wahrscheinlich entweder Mac OS X oder eine Linux-Version ausführen. So sehr ich mir wünsche, dass RVM unter Windows verfügbar ist, ist dies nicht der Fall. Wenn Sie unter Windows arbeiten, können Sie Pik ausprobieren. Ich verstehe, dass es ähnlich ist, aber ich hatte noch keine Gelegenheit, es zu verwenden.
1 - Wie installiere ich RVM?
Die Installation von RVM ist etwas umständlich. Zuerst muss Git installiert sein. Anschließend laden Sie ein Skript herunter und führen es aus, um die Installation durchzuführen. Die RVM-Site empfiehlt dies folgendermaßen:
1 |
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm) |
Selbst wenn Sie mit der Befehlszeile ziemlich vertraut sind, werden Sie wahrscheinlich eine Pause einlegen, wenn Sie dies sehen. Es ist einfacher, es rückwärts zu lesen: Wir verwenden curl
, um das Skript herunterzuladen, auf das die URL verweist. Mit dem Befehl -s
wird curl
darüber informiert, dass Sie das Skript unbeaufsichtigt herunterladen möchten (ohne Ausgabe). Dies ist das Skript, mit dem RVM installiert wird.
Um dieses Skript automatisch auszuführen, verwenden wir das doppelte Vorzeichen, um das Skript an den Befehl auf der linken Seite des Operators zu übergeben. In unserem Fall ist das bash
. Sie kennen Bash möglicherweise als Shell oder als Terminal, das Sie wahrscheinlich gerade ausführen. Dadurch wird das Skript in einer Bash-Shell ausgeführt (die in der Bash-Shell in Ihrem Terminal ausgeführt wird!).
Mit dem obigen Befehl wird das Skript heruntergeladen und ausgeführt, mit dem RVM installiert wird.
Aber wir sind noch nicht ganz fertig. Um sicherzustellen, dass RVM ordnungsgemäß ausgeführt wird, müssen Sie der Datei ~/.bash_profile
oder ~/.bashrc
das folgende Snippet hinzufügen.
1 |
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # This loads RVM into a shell session. |
Wie Sie dem Kommentar entnehmen können, wird RVM in eine Shell-Sitzung geladen. Insbesondere - wenn Sie neugierig sind - lädt dies den Befehl rvm
als Shell-Funktion (wie die, die Sie möglicherweise zu Ihrer ~/.bash_profile
-Datei hinzufügen) und nicht als Binärfunktion (ein Programm, das Sie in der Shell ausführen, wie z. B. ls
) oder ruby
).
Denken Sie jedoch daran, dass RVM eine schnell wachsende Bibliothek ist und sich möglicherweise die Installationsmethode ändert. Informationen zu den aktuellsten Möglichkeiten zur Installation von RVM finden Sie in der Dokumentation.
Nachdem wir RVM installiert haben, können wir es tatsächlich verwenden!
2 - Wie verwende ich RVM?
Die beiden großen Funktionen, die RVM bietet, sind Rubine und Edelsteine. Schauen wir uns diese nacheinander an und schauen uns dann einige andere Anpassungen an.
Rubies
Rubies sind die primäre (wenn auch nicht ausschließliche) Absicht von RVM; Erinnerst du dich, wofür RVM steht? Ruby enVironment Manager. Installieren wir also ein paar rubies!
Wenn Sie Ruby schon länger verwenden, wissen Sie, dass Sie aus verschiedenen Ruby-Implementierungen auswählen können. Mit diesem Befehl können Sie sehen, welche mit RVM verfügbar sind:
1 |
rvm list known |
Schauen Sie sich übrigens diese Syntax an. Die meisten RVM-Befehle, die Sie verwenden, lauten wie folgt: rvm
, eine Kategorie und ein Befehl für diese Kategorie. Voraussichtlich werden hiermit alle Ruby-Implementierungen (und Versionen von Implementierungen) aufgelistet, die Sie installieren können.
Wählen wir also eine Version aus und installieren sie. Es gibt jedoch etwas, das wir zuerst tun sollten. Es ist möglich, dass Ihre Plattform einige Abhängigkeiten benötigt, bevor Sie den Ruby Ihrer Wahl installieren können. Unglaublicherweise hat RVM auch hier Ihren Rücken: Führen Sie den Befehl rvm notes
aus, um zu sehen, welche Abhängigkeiten Sie installieren sollten. Es werden die verschiedenen Rubine aufgelistet, die Sie installieren können, und was Sie zuerst für jeden von ihnen installieren sollten.
Ich verwende im Allgemeinen ausschließlich Ruby 1.9.2. Installieren wir das also. Verwenden Sie zum Installieren eines Ruby den Befehl rvm install
, gefolgt von der gewünschten Implementierung und Version, wie in der bekannten rvm list known
.
1 |
rvm install ruby-1.9.2-p180 |
Mit diesem Befehl können Sie beliebig viele Ruby-Versionen installieren.
Die Ausführung dieses Befehls dauert einige Minuten. Sobald er ausgeführt wurde, ist die von Ihnen ausgewählte Ruby-Version auf Ihrem Computer installiert.
Mit diesem Befehl können Sie beliebig viele Ruby-Versionen installieren. Aber wie verwenden Sie sie, nachdem Sie mehr als eine Version installiert haben, oder wechseln Sie zwischen ihnen? Was ist mit der Ruby-Implementierung, die wahrscheinlich mit Ihrem Computer geliefert wurde?
Es ist ziemlich einfach. Verwenden Sie diesen Befehl, um einen bestimmten Ruby zu verwenden:
1 |
rvm use <ruby string> # in abstract |
2 |
|
3 |
rvm use 1.9.2-p180 |
Wenn das alles ist, müssen Sie dies jedes Mal eingeben, wenn Sie ein Terminal öffnen. Andernfalls verwenden Sie standardmäßig den integrierten Ruby. Um dies zu vermeiden, fügen Sie das Flag --default
hinzu. Auf diese Weise erhalten Sie auch eine Verknüpfung, mit der Sie jederzeit zu Ihrem Standard-Ruby zurückkehren können. Wenn Sie zu einem anderen Ruby gewechselt haben, geben Sie einfach rvm default
ein, um zurückzuschalten.
Geben Sie
ruby -v
ein, um sicherzustellen, dass Sie die richtige Version verwenden. Sie sollten die Version von Ruby sehen, die gerade ausgewählt verwendet.
Wenn Sie ein paar verschiedene Rubine verwenden, möchten Sie verfolgen, was Sie haben. Deshalb haben Sie den Befehl rvm list
. Hier ist mein aktuelles Inventar:
1 |
ruby-1.8.7-p302 [ x86_64 ] |
2 |
ruby-1.8.7-p334 [ x86_64 ] |
3 |
ruby-1.9.2-p0 [ x86_64 ] |
4 |
ruby-1.9.2-p180 [ x86_64 ] |
Wie Sie vielleicht erraten haben, bedeutet das =>
neben dem letzten, dass es das ist, das ich gerade benutze.
Wenn Sie einen Ruby entfernen möchten, ist dies genauso einfach. Verwenden Sie rvm remove <ruby string>
, um alles zu entfernen, was mit diesem Ruby zu tun hat. Wenn Sie glauben, dass Sie Ruby in Zukunft erneut installieren möchten, verwenden Sie einfach rvm uninstall
. Dadurch bleiben der Quellcode und andere Teile erhalten.
Gemsets
Während mehrere Rubine cool sind, sind Edelsteine - zumindest für mich - dort, wo sie sind. Grundsätzlich ist ein Gemset eine Reihe von Edelsteinen, die Sie ausschließlich (oder fast ausschließlich) verwenden. Das ist in zwei Fällen großartig:
- Sie möchten verschiedene Versionen eines bestimmten Edelsteins verwenden, wahrscheinlich mit verschiedenen Versionen von Ruby.
- Sie möchten Ihre Edelsteine „sandbox“, sodass zu einem bestimmten Zeitpunkt nur bestimmte Edelsteine verfügbar sind.
Mal sehen, wie das funktioniert.
1 |
rvm gemset create <gemset name> |
Natürlich können Sie Ihr Gemset beliebig benennen. Verwenden Sie die rvm gemset list
, um alle Ihre Edelsteine anzuzeigen. Wenn Sie dies jetzt tun, werden zwei Edelsteine angezeigt (vorausgesetzt, Sie führen nur den obigen Befehl aus). Einer ist <gemset name>
(oder wie auch immer Sie ihn genannt haben) und global
. Das global
Gemset ist ein besonderes; Wie Sie wahrscheinlich erraten können, sind die Edelsteine im global
Gemset verfügbar, unabhängig davon, welches Gemset Sie verwenden.
Sie können den Vorteil davon sehen: Es gibt einige Edelsteine, die Sie einfach immer wollen, egal was Sie tun. Es gibt wirklich ein anderes Gemset, das Standard-Gemset, das nicht aufgeführt ist und keinen Namen hat. Wenn Sie kein bestimmtes Gemset verwenden, stehen Ihnen die Edelsteine im Standard-Gemset (und natürlich im globalen Gemset) zur Verfügung.
Sie können Ihre Gemsets mithilfe des Befehls rvm gemset list
anzeigen. Nach wie vor markiert =>
das Gemset, das Sie gerade verwenden. Wenn kein Gemset markiert ist, verwenden Sie das Standard-Gemset.
Nichts könnte einfacher sein, als Edelsteine zu wechseln:
1 |
rvm gemset use <gemset name> |
Sobald Sie ein bestimmtes Gemset verwenden, können Sie Edelsteine mit dem
gem install gem-name
. Hier gibt es einen wichtigen Hinweis. Verwenden Sie bei der Installation keinsudo
. Dabei wird völlig ignoriert, dass RVM die Show hier ausführt und auf dem gesamten System außerhalb der RVM-Umgebung installiert. Also,gem install gem-name
.
Wie bereits erwähnt, werden die Standard- und globalen Gemsets erstellt, wenn Sie einen neuen Ruby installieren. Wenn Sie bestimmte Edelsteine haben, die bei der Installation eines neuen Ruby standardmäßig installiert werden sollen, fügen Sie sie der entsprechenden Edelsteindatei hinzu. In ~/.rvm/gemsets/
finden Sie zwei Dateien: default.gems
und global.gems
. Listen Sie einfach die Edelsteine nach Namen auf, eine aus jeder Zeile. Diese Edelsteine werden im entsprechenden Gemset installiert, wenn Sie einen neuen Ruby installieren.
Diese Edelsteindateien sind auch eine großartige Möglichkeit, eine Liste von Edelsteinen zu speichern. Sie können ein Gemset mit rvm gemset export
exportieren. Dadurch wird eine Liste der Edelsteine im aktuellen Gemset als default.gems
in dem Ordner gespeichert, in dem Sie sich gerade befinden. Wenn Sie dieser Datei einen bestimmten Namen geben möchten, fügen Sie ihn einfach am Ende dieses Befehls hinzu. Dann können Sie diese Liste von Edelsteinen in einem anderen Ruby oder sogar auf einem anderen Computer importieren (denken Sie daran, sie in die Quellcodeverwaltung einzuchecken), indem Sie den rvm gemset import gem-list-file-name
.
Noch etwas zu Gemsets: Sie können sie in Ihren rvm use
-Befehlen verwenden. Machen Sie das:
1 |
|
2 |
rvm use <ruby string>@<gemset name> |
.rmvrc-Dateien
.rvmrc-Dateien sind wirklich cool. Betrachten Sie sie als das Einstellungsfeld von RVM. Sie können eine .rvmrc-Datei an drei verschiedenen Stellen haben: /etc/rvmrc
legt Optionen für das gesamte System fest; ~/.rvmrc
legt Optionen für den aktuellen Benutzer fest; Eine .rvmrc
-Datei in einem bestimmten Verzeichnis passt die Dinge für dieses Projekt an.
Die globalen und Benutzer-.rvmrc
-Dateien sind hauptsächlich Kompilierungsoptionen für die Installation neuer Rubine. Die projektspezifischen .rvmrc
-Dateien machen jedoch Spaß.
So geht's: Wenn Sie ein neues Projekt starten, müssen Sie eine .rvmrc
-Datei in diesem Verzeichnis erstellen. Angenommen, Sie haben eine Rails-App, für deren Ausführung Ruby 1.8.6 erforderlich ist. Sie haben Ruby 1.9.2 als Standard und möchten nicht daran denken müssen, Rubies zu wechseln, wenn Sie an diesem Projekt arbeiten. Geben Sie also diesen Befehl ein:
1 |
|
2 |
rvm --rvmrc --create 1.8.6-p334 |
Dadurch wird eine stark kommentierte .rmvrc
-Datei erstellt, die Ihre Ruby-Umgebung nahtlos ändert, wenn Sie in dieses Verzeichnis wechseln. Lesen Sie unbedingt die dortigen Kommentare, um zu sehen, was genau zum Wechseln der Umgebung getan wird und was Sie mit .rmvrc
-Dateien tun können.
Mit Edelsteinen wird es noch besser. Ich verwende Ruby 1.9.2 für alle meine Projekte, möchte aber für jedes Projekt ein anderes Gemset haben. Wenn ich also ein Projekt namens superproj
habe, kann ich Folgendes tun:
1 |
|
2 |
rvm --rvmrc --create 1.9.2@superproj |
Fügen Sie einfach ein At-Zeichen nach dem Ruby-Namen hinzu und folgen Sie diesem mit Ihrem Gemset-Namen. Wie erwartet werden dadurch nahtlos die richtigen Edelsteine für dieses Projekt geladen. Wenn dieses Gemset noch nicht erstellt wurde, erledigt RVM dies auch für Sie.
Schnelle Anpassung
Möglicherweise möchten Sie herausfinden, welchen Rubin und Gemset Sie derzeit verwenden. Dazu gibt es zwei Möglichkeiten: Erstens können Sie einfach den Befehl rvm info
verwenden. Hier erfahren Sie (unter anderem), welchen Rubin und Gemset Sie verwenden.
Wenn Sie etwas dauerhafteres möchten, können Sie den Namen direkt in Ihre Eingabeaufforderung einfügen. Fügen Sie dazu Ihrem ~/.bash_profile
eine Zeile hinzu. Das Beispiel in der RVM-Dokumentation lautet wie folgt:
1 |
|
2 |
PS1="\$(~/.rvm/bin/rvm-prompt) $PS1" |
Führen Sie dazu das Skript ~/.rvm/bin/rvm-prompt
aus und fügen Sie die Ausgabe in Ihre Eingabeaufforderung ein (dann wird angehängt, was auch immer Ihre Eingabeaufforderung derzeit am Ende ist). Dadurch werden der Ruby-Name und der Gemset-Name an den Anfang Ihrer Eingabeaufforderung gesetzt. Wenn Sie mit dem Anpassen Ihrer Eingabeaufforderung vertraut sind, finden Sie in der Dokumentation weitere Möglichkeiten zum Anpassen dieser Ausgabe.
Abschluss: Viel Spaß!
Ich hoffe, ich habe gut genug demonstriert, dass es wirklich keinen Grund gibt, RVM nicht zu verwenden, wenn Sie sich auf einer Unix-Box befinden. Persönlich habe ich es noch nicht für notwendig gehalten, mehr als einen Interpreter / eine Version von Ruby zu verwenden, aber ich finde die Gemsets und projektspezifischen .rvmrc
-Dateien unglaublich praktisch.
Aber es gibt mehr über RVM zu lernen, als ich hier gezeigt habe. Weitere Informationen finden Sie in der hervorragenden Dokumentation. Und lassen Sie mich in den Kommentaren wissen, wenn Sie Fragen haben.