In diesem Artikel werde ich die beliebtesten Version-Manager für Ruby auf einem Mac vergleichen: Chruby, Rbenv und RVM, sowie Asdf, einen Version-Manager für mehrere Sprachen, und Frum, einen brandneuen Version-Manager, der in Rust geschrieben wurde. Ich werde Empfehlungen abgeben, basierend darauf, was Sie am ehesten benötigen werden.
Vorkonfigurierte Ruby-Version ist für Entwickler ungeeignet
Leute, die neu in Ruby sind, freuen sich oft, dass Ruby auf macOS vorinstalliert ist. Sie sind oft enttäuscht, wenn ein erfahrenererer Entwickler ihnen sagt: „Verwenden Sie die System-Ruby von Mac nicht.“ Ich habe an anderer Stelle über die Gründe geschrieben. Kurz gesagt, die System-Ruby ist für macOS da, nicht für Sie. Sie ist für das Ausführen von Hilfsprogramm-Skripten in Ordnung, aber für die Entwicklung ist die System-Ruby veraltet und, wenn Sie nicht vorsichtig sind, kann die Installation von Gems zu Kopfschmerzen führen (einschließlich Sicherheitsverletzungen des Systems).
Probleme mit Homebrew’s Ruby
Homebrew ist das Paket-Manager-Tool, das fast zum Standard für die Hinzufügung von Entwickler-Software zu macOS geworden ist. Homebrew macht es einfach, eine neue Ruby-Version zu installieren, um nicht auf die System-Ruby angewiesen zu sein. Aber es gibt zwei Probleme mit Homebrew. Erstens kann die Ruby-Version von Homebrew automatisch und unerwartet durch eine neuere Version ersetzt werden, wenn andere Homebrew-Pakete installiert werden (ein Problem, das durch brew pin ruby
gelöst wird). Wichtiger ist jedoch, dass Homebrew Ihnen nur erlaubt, eine Version von Ruby zu installieren. Wenn Sie an mehr als einem Projekt in Ruby entwickeln oder pflegen, müssen Sie wahrscheinlich zwischen Ruby-Versionen wechseln. Dafür benötigen Sie einen Version-Manager.
Asdf für Mehrsprachigkeit
Asdf ist ein Versionierungs-Manager, der für mehrere Sprachen geeignet ist. Wenn Sie Webanwendungen mit Ruby und Rails 6 entwickeln, müssen Sie Node und Yarn installieren, um eine Rails-Starteranwendung zu erstellen. (Rails 7 könnte das Bedürfnis nach Node eliminieren, aber das ist zum jetzigen Zeitpunkt noch nicht sicher.)
Für einen Rails-Entwickler ist Asdf daher ein idealer Versionierungs-Manager. Es wird Ihnen auch bei der Anwendungsentwicklung in Python, Elixir oder vielen anderen Sprachen (siehe eine Liste der unterstützten Sprachen) dienen. Gibt es Nachteile bei der Verwendung von Asdf? Nur zwei. Es verwendet Shims zur Interzeption von häufigen Befehlen, was die Problembehandlung erschweren kann. Auch kann es bei einigen Operationen etwas langsam sein. Wenn Sie in mehreren Sprachen entwickeln, empfehle ich Ihnen, Asdf auszuprobieren, um zu sehen, ob es Ihnen gefällt. Wechseln Sie zu Frum, dem in Rust geschriebenen Ruby-spezifischen Versionierungs-Manager, wenn Sie feststellen, dass Asdf Ihnen zu langsam ist.
Ruby-spezifische Versionierungs-Manager
Wenn Sie nur Anwendungen mit Ruby entwickeln möchten, wählen Sie einen der vier Ruby-spezifischen Versionierungs-Manager: Chruby, Frum, Rbenv und RVM. Die Unterschiede zwischen den vier liegen in Geschwindigkeit, Komplexität und der Art, wie jeder Ruby-Versionen wechselt. Schauen wir uns zuerst den ältesten an: RVM.
RVM
RVM war der erste populäre Version-Manager für Ruby. Er wird weiterhin gepflegt und wird noch immer weit verbreitet eingesetzt. RVM modifiziert den Systembefehl cd
, um Umgebungsvariablen beim Wechseln von Verzeichnissen zu setzen. Um den cd
Befehl zu überschreiben, ändert das RVM-Installationsskript die Shell-Konfigurationsdatei (die ~/.zshrc
Datei auf neueren Macs).
RVM zeigt Umgebungsvariablen korrekt an, um die Ruby- und Gems-Version und -Position offen zu legen, was bei der Problemlösung helfen kann. RVM verfügt jedoch auch über zusätzliche Funktionen wie Gemsets. Gemsets sind nicht mehr erforderlich, da Bundler zum Kern von Ruby hinzugefügt wurde, um Gems-Abhängigkeiten zu verwalten. Die zusätzliche Komplexität ist nicht erforderlich, daher haben viele Entwickler zu einem neueren Version-Manager wie Rbenv, Chruby oder Frum gewechselt.
Rbenv
Zusammen mit RVM, Rbenv war lange der beliebteste Version-Manager für Ruby. Rbenv verwendet Shims zur Interzeption gängiger Ruby-Befehle. (Asdf verwendet ebenfalls Shims.)
Nach der Installation von Rbenv mit Homebrew müssen Sie Ihre ~/.zshrc
Datei ändern, damit die Rbenv-Shims Vorrang vor gewöhnlichen Ruby-Befehlen haben. Der Shim ruft den rbenv exec
Befehl auf, der festlegt, welche Version von Ruby verwendet werden soll, bevor jeder Ruby-Befehl ausgeführt wird.
Shims haben zwei Nachteile. Erstens erschweren Shims die Problembehandlung, indem sie den tatsächlichen Befehl verbergen. Zum Beispiel zeigt der Befehl which ruby
den Rbenv-Shim an, nicht die tatsächliche Ruby-Version (Sie müssen die Umgebungsvariable RBENV_DEBUG
setzen, wenn Sie den tatsächlichen Ruby-Befehl sehen möchten). Zweitens kann ein Shim Mikrosekunden Verzögerung beim Ausführen eines Ruby-Befehls verursachen. (Rbenv greift jedes Mal ein, wenn Sie einen Ruby-Befehl ausführen, im Gegensatz zu RVM, das nur beim Wechseln der Verzeichnisse eingreift.) Für Entwickler, die die Verzögerung bemerken oder die Idee von Shims nicht mögen, gibt es Chruby oder Frum.
Chruby
Chruby ist nicht so bekannt wie RVM oder Rbenv, aber es wird von mehreren prominenten Ruby-Entwicklern unterstützt. Im Gegensatz zu RVM überschreibt es den cd
-Befehl nicht. Im Gegensatz zu Rbenv oder Asdf interagiert es nicht mit Befehlen mithilfe von Shims. Sie müssen Ihr ~/.zshrc
-Datei so ändern, dass Chruby in Ihrer lokalen Shell-Umgebung ausgeführt wird. Es ist nicht notwendig, Ihren $PATH
zu ändern, da Chruby dies basierend auf der ausgewählten Ruby-Version für Sie übernimmt.
Chruby setzt auch bestimmte Umgebungsvariablen für Ruby. Das ist alles, was benötigt wird, damit Chruby zwischen Ruby-Versionen wechseln kann. Es funktioniert gut für die Problembehandlung mit which
. Ich habe Chruby mehrere Jahre lang verwendet und hatte keine Probleme damit. Chruby ist eine großartige Wahl, aber Sie möchten vielleicht auch Frum, den neuesten Ruby-Version-Manager, ausprobieren.
Frum
Frum wird in Rust geschrieben, einer guten Sprache für schnelle Befehlszeilenausführung von Systemsoftware. Frum ist neu (erschienen Anfang 2021). Im Gegensatz zu Asdf, Chruby oder Rbenv enthält es einen integrierten Ruby-Installer-Befehl, sodass kein zusätzliches Programm zum Installieren von Ruby benötigt wird. Der Installer ist schnell und Frum benötigt keine Abhängigkeiten (es ist eine All-in-One-Rust-Executable, die du mit Homebrew installieren kannst).
Nach der Installation von Frum musst du dein ~/.zshrc
Datei so ändern, dass Frum in deiner lokalen Shell-Umgebung ausgeführt wird. Wie die anderen Version-Manager überprüft es auf eine .ruby-version
Datei in einem Projektverzeichnis und, wenn keine Version für ein Projekt angegeben ist, wird standardmäßig eine globale Ruby-Version verwendet. Es gibt keine Shims (im Gegensatz zu Asdf oder Rbenv) und es überschreibt den cd
Befehl nicht (im Gegensatz zu RVM). Obwohl es neu ist, empfehle ich es, weil es alles in einem ist und schnell.
Installation eines Version Managers für Ruby
I’ve written a complete guide to installing Ruby on Mac. In the guide, I provide instructions for:
- Installation von Ruby mit Asdf
- Installation von Ruby mit Frum
- Installation von Ruby mit Chruby
- Installation von Ruby mit Homebrew
Wenn du RVM oder Rbenv erkunden möchtest, sieh bitte hier:
A Note about Docker
Wenn man über Ruby-Versionsmanager spricht, wird wahrscheinlich jemand sagen: „Ich benutze Docker.“ Docker ist ein Containerisierungswerkzeug, das einige Entwickler zur Versionsverwaltung nutzen. Der Haupteinsatzfall für Docker besteht darin, einen reproduzierbaren virtuellen Server zu erstellen, der eine konfigurierte Version jeglicher Softwareabhängigkeiten enthält, die zum Ausführen einer Anwendung benötigt werden (Sprache, Datenbanken, Nachrichtenwarteschlangen). Daher ist es ideal, um eine „eingefrorene“ Version eines Entwicklungsbetriebs zur Bereitstellung auf einem Server zu erstellen.
Man kann auch lokal innerhalb eines Containers entwickeln, aber es wird langsamer laufen, mehr Speicher benötigen und die Konfigurationskomplexität im Vergleich zu einem Versionsmanager erhöhen. Um die Dinge einfach zu halten, vermeide ich Docker für die lokale Entwicklung, es sei denn, eine Anwendung ist unheimlich komplex.
Schlussfolgerung
Wenn Sie an mehreren Projekten in Ruby arbeiten, sind Sie nicht nur ein harmloser Ruby-Benutzer. Stellen Sie sicher, dass Sie einen großartigen Versionsmanager in Ihrer lokalen Entwicklungsumgebung installieren.
I like Asdf because I develop in Ruby and JavaScript and Asdf gives me one version manager for both languages. However, Asdf uses shims (like Rbenv) so occasionally it’s slower than I like. I also find it annoying that Asdf hides the actual command from troubleshooting with the which
command. If these drawbacks outweigh the convenience of managing multiple languages, I recommend using Frum to switch among your Ruby versions. Version managers should be simple and stay out of your way when you’re working.
Häufig gestellte Fragen (FAQs) zu Ruby-Versionsmanagern für MacOS
Was sind die wesentlichen Unterschiede zwischen RVM und rbenv?
RVM (Ruby Version Manager) und rbenv sind beide Tools zur Verwaltung mehrerer Ruby-Versionen auf Ihrem System. Der Hauptunterschied liegt in ihrem Ansatz. RVM ist reicher an Funktionen und ermöglicht Ihnen die Verwaltung von Gemsets – ein Satz von Gems, die für eine bestimmte Ruby-Anwendung verwendet werden. Auf der anderen Seite ist rbenv einfacher und konzentriert sich nur auf das Wechseln von Ruby-Versionen. Es unterstützt keine Gemsets, aber Sie können ähnliche Funktionalität mit einem Plugin namens ruby-build erreichen.
Wie installiere ich eine bestimmte Ruby-Version mit RVM?
Um eine bestimmte Ruby-Version mit RVM zu installieren, können Sie den Befehl ‘rvm install’ verwenden, gefolgt vom Versionsnummern. Zum Beispiel würden Sie zum Installieren von Ruby 2.6.3 den Befehl ‘rvm install 2.6.3’ verwenden. Sobald installiert, können Sie zu dieser Version wechseln, indem Sie den Befehl ‘rvm use’ verwenden, wie zum Beispiel ‘rvm use 2.6.3’.
Kann ich sowohl RVM als auch rbenv auf dem gleichen System verwenden?
Obwohl es technisch möglich ist, sowohl RVM als auch rbenv auf dem gleichen System zu installieren, wird es grundsätzlich nicht empfohlen. Beide Tools ändern Ihre Shell-Umgebung und das gleichzeitige Vorhandensein kann zu unerwartetem Verhalten führen. Es ist am besten, sich auf eines zu verlassen, basierend auf Ihren Bedürfnissen und es beizubehalten.
Wie deinstalliere ich eine Ruby-Version mit rbenv?
Um eine Ruby-Version mit rbenv zu deinstallieren, können Sie den Befehl ‘rbenv uninstall’ verwenden, gefolgt von der Versionsnummern. Zum Beispiel würden Sie zum Deinstallieren von Ruby 2.6.3 den Befehl ‘rbenv uninstall 2.6.3’ verwenden.
Wie setze ich eine Standard-Ruby-Version mit RVM?
Um eine Standard-Ruby-Version mit RVM festzulegen, können Sie den Befehl `rvm –default use` verwenden, gefolgt von der Versionsnummer. Zum Beispiel würden Sie zum Setzen von Ruby 2.6.3 als Standard den Befehl `rvm –default use 2.6.3` verwenden.
Wie aktualisiere ich rbenv und seine Plugins?
Um rbenv und seine Plugins zu aktualisieren, können Sie git verwenden. Navigieren Sie im Terminal zum rbenv-Verzeichnis (normalerweise `~/.rbenv`) und führen Sie `git pull` aus. Navigieren Sie dann in jedem Plugin-Verzeichnis und tun Sie dasselbe.
Kann ich RVM oder rbenv auch mit anderen Programmiersprachen verwenden?
RVM und rbenv sind speziell für die Verwaltung von Ruby-Versionen entwickelt. Wenn Sie Versionen anderer Programmiersprachen verwalten möchten, sollten Sie nach Tools wie pyenv für Python oder nvm für Node.js suchen.
Wie liste ich alle installierten Ruby-Versionen mit rbenv auf?
Um alle installierten Ruby-Versionen mit rbenv aufzulisten, können Sie den Befehl `rbenv versions` verwenden. Dies zeigt eine Liste aller Ruby-Versionen, die rbenv verwenden kann.
Wie behandle ich Gems-Abhängigkeiten mit RVM?
RVM ermöglicht die Verwaltung von Gems-Abhängigkeiten durch die Verwendung von Gemsets. Sie können ein Gemset mit dem Befehl `rvm gemset create` erstellen, damit mit dem Befehl `rvm gemset use` wechseln und dann nach Bedarf Gems installieren.
Wie installiere ich eine neue Ruby-Version mit rbenv?
Um eine neue Ruby-Version mit rbenv zu installieren, können Sie den Befehl `rbenv install` verwenden, gefolgt von der Versionsnummer. Zum Beispiel würden Sie zum Installieren von Ruby 2.6.3 den Befehl `rbenv install 2.6.3` verwenden.
Source:
https://www.sitepoint.com/ruby-version-managers-macos/