In deze artikel vergelijk ik de meest populaire versiebeheerders voor Ruby op een Mac: Chruby, Rbenv, en RVM, evenals Asdf, een versiebeheerder voor meerdere talen, en Frum, een gloednieuwe versiebeheerder geschreven in Rust. Ik zal aanbevelingen doen op basis van wat je waarschijnlijk het meest nodig hebt.
Vooraf geïnstalleerde Ruby is Niet voor Ontwikkelaars
Mensen die nieuw zijn in Ruby zijn verrast te ontdekken dat Ruby al vooraf geïnstalleerd is op macOS. Ze zijn vaak teleurgesteld wanneer een meer ervaren ontwikkelaar hen vertelt: “Gebruik de Mac-systeem Ruby niet.” Ik heb ergens anders geschreven over de redenen. Kort gezegd, de systeem Ruby is er voor macOS, niet voor jou. Het is prima voor het uitvoeren van utility scripts, maar voor ontwikkeling is de systeem Ruby verouderd en, als je niet voorzichtig bent, kan het installeren van gems leiden tot hoofdpijn (inclusief inbreuken op systeembeveiliging).
Homebrew’s Eén Ruby Probleem
Homebrew is de pakketbeheerder die bijna standaard is geworden voor het toevoegen van ontwikkelaarssoftware aan macOS. Homebrew maakt het gemakkelijk om een nieuwe Ruby-versie te installeren om niet afhankelijk te zijn van de systeem Ruby. Maar er zijn twee problemen met Homebrew. Ten eerste kan de Ruby-versie van Homebrew automatisch en onverwacht worden vervangen door een nieuwere versie wanneer andere Homebrew-pakketten worden geïnstalleerd (een probleem dat wordt opgelost door brew pin ruby
). Belangrijker nog, Homebrew laat je maar één versie van Ruby installeren. Als je aan meer dan één project in Ruby ontwikkelt of onderhoudt, zul je waarschijnlijk verschillende Ruby-versies moeten wisselen. Daar heb je een versiebeheerder voor nodig.
Asdf voor Meerdere Talen
Asdf is een versiemanager die meerdere talen ondersteunt. Als je Ruby gebruikt om webtoepassingen te ontwikkelen met Rails 6, zul je Node en Yarn moeten installeren om een Rails startertoepassing te bouwen. (Rails 7 kan de noodzaak voor Node elimineren, maar dat is nog niet zeker op dit moment.)
Dus, voor een Rails ontwikkelaar, is Asdf een ideale versiemanager. Het zal je ook goed dienen als je toepassingen ontwikkelt in Python, Elixir of vele andere talen (zie een lijst van ondersteunde talen). Is er een nadeel aan het gebruik van Asdf? Slechts twee. Het gebruikt shims om veelgebruikte opdrachten af te vangen, wat probleemoplossen bemoeilijkt. Ook kan het een beetje traag zijn voor sommige operaties. Als je in meerdere talen ontwikkelt, raad ik je aan Asdf uit te proberen om te zien of je ervan houdt. Schakel over naar Frum, de Ruby-only versiemanager geschreven in Rust, als je vindt dat Asdf je vertraagt.
Ruby-only Versiemanagers
Als je enkel van plan bent toepassingen te ontwikkelen met Ruby, kies onder de vier Ruby-only versiemanagers: Chruby, Frum, Rbenv en RVM. De verschillen tussen de vier liggen in snelheid, complexiteit en hoe elk Ruby-versies wisselt. Laten we eerst kijken naar de oudste: RVM.
RVM
RVM was de eerste populaire versiebeheerder voor Ruby. Het wordt nog steeds onderhouden en veel gebruikt. RVM wijzigt de systeemopdracht cd
om omgevingsvariabelen in te stellen wanneer u directory’s wijzigt. Om de cd
opdracht te overschrijven, wijzigt het RVM installatiescript het shellconfiguratiebestand (het ~/.zshrc
bestand op nieuwere Macs).
RVM geeft omgevingsvariabelen correct weer om de Ruby- en gemversie en locatie te onthullen, wat kan helpen bij het oplossen van problemen. RVM bevat echter ook extra functies zoals gemsets. Gemsets zijn niet langer nodig, aangezien Bundler aan de kern van Ruby is toegevoegd om gemafhankelijkheden te beheren. De extra complexiteit is niet nodig, dus veel ontwikkelaars zijn overgestapt op een nieuwere versiebeheerder zoals Rbenv, Chruby of Frum.
Rbenv
Samen met RVM is Rbenv altijd al een van de populairste versiebeheerders voor Ruby geweest. Rbenv gebruikt shims om veelgebruikte Ruby-opdrachten af te vangen. (Asdf gebruikt ook shims.)
Na het installeren van Rbenv met Homebrew, moet u uw ~/.zshrc
bestand aanpassen zodat de Rbenv shims voorrang krijgen boven gewone Ruby-opdrachten. De shim roept de rbenv exec
opdracht aan, die bepaalt welke versie van Ruby moet worden gebruikt voordat elke Ruby-opdracht wordt uitgevoerd.
Shims hebben twee nadelen. Ten eerste maken shims het oplossen van problemen moeilijker door de eigenlijke opdracht te verbergen. Bijvoorbeeld, de which ruby
opdracht toont de Rbenv shim, niet de eigenlijke Ruby-versie (je moet de RBENV_DEBUG
omgevingsvariabele instellen als je de eigenlijke Ruby-opdracht wilt zien). Ten tweede kan een shim microseconden vertraging toevoegen aan de uitvoering van een Ruby-opdracht. (Rbenv grijpt in elke keer dat je een Ruby-opdracht uitvoert, in tegenstelling tot RVM, dat slechts grijpt wanneer je directory’s wisselt.) Voor ontwikkelaars die de vertraging opmerken, of het idee van shims niet leuk vinden, is er Chruby of Frum.
Chruby
Chruby is niet zo bekend als RVM of Rbenv, maar het wordt geprezen door verschillende prominente Ruby-ontwikkelaars. In tegenstelling tot RVM, overschrijft het de cd
opdracht niet. In tegenstelling tot Rbenv of Asdf, grijpt het niet in met shims. Je moet je ~/.zshrc
bestand aanpassen zodat Chruby in je lokale shell-omgeving draait. Er is geen behoefte om je $PATH
aan te passen, aangezien Chruby dat voor je doet, op basis van de gekozen Ruby-versie.
Chruby stelt ook bepaalde omgevingsvariabelen in voor Ruby. Dat is alles wat nodig is voor Chruby om te wisselen tussen Ruby-versies. Het werkt prima voor probleemoplossing met which
. Ik heb jarenlang Chruby gebruikt en er geen problemen mee gehad. Chruby is een uitstekende keuze, maar misschien wil je Frum, de nieuwste Ruby-versiebeheerder, proberen.
Frum
Frum is geschreven in Rust, een goede taal voor snelle command-line uitvoering van systeemsoftware. Frum is nieuw (uitgebracht begin 2021). In tegenstelling tot Asdf, Chruby of Rbenv, bevat het een ingebouwde Ruby-installatiecommando, zodat er geen extra programma nodig is om Ruby te installeren. De installer is snel en Frum heeft geen afhankelijkheden (het is een alles-in-één Rust-uitvoerbaar bestand dat je kunt installeren met Homebrew).
Na het installeren van Frum, moet je je ~/.zshrc
bestand aanpassen zodat Frum in je lokale shell-omgeving draait. Net als de andere versiebeheerders, controleert het op een .ruby-version
bestand in een projectmap en, als er geen versie is opgegeven voor een project, zal het standaard naar een globale Ruby-versie gaan. Er zijn geen shims (in tegenstelling tot Asdf of Rbenv) en het overschrijft het cd
commando niet (in tegenstelling tot RVM). Hoewel het nieuw is, raad ik het aan omdat het alles-in-één is en snel.
Het installeren van een Versiebeheerprogramma voor Ruby
I’ve written a complete guide to installing Ruby on Mac. In the guide, I provide instructions for:
- het installeren van Ruby met Asdf
- het installeren van Ruby met Frum
- het installeren van Ruby met Chruby
- het installeren van Ruby met Homebrew
Als je RVM of Rbenv wilt verkennen, zie:
A Note about Docker
Als je het hebt over Ruby versiebeheerders, zal iemand waarschijnlijk zeggen: “Ik gebruik Docker.” Docker is een containerisatie-tool die sommige ontwikkelaars gebruiken voor versiebeheer. Het primaire gebruiksgeval voor Docker is het creëren van een reproduceerbare virtuele server die een geconfigureerde versie bevat van alle softwareafhankelijkheden die nodig zijn om een applicatie uit te voeren (taal, databases, berichtenwachtrijen). Zo is het ideaal voor het creëren van een “gevroren” versie van een ontwikkelomgeving voor implementatie naar een server.
Je kunt ook lokaal ontwikkelen binnen een container, maar het zal trager draaien, meer geheugen vereisen en configuratiecomplexiteit toevoegen in vergelijking met een versiebeheerder. Om dingen simpel te houden, vermijd ik Docker voor lokale ontwikkeling, tenzij een applicatie verontrustend complex is.
Conclusie
Als je aan meerdere projecten in Ruby werkt, ben je niet zomaar een casual Ruby gebruiker. Zorg ervoor dat je een goede versiebeheerder installeert in je lokale ontwikkelomgeving.
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.
Veelgestelde Vragen (FAQs) over Ruby Versiebeheerders voor MacOS
Wat zijn de belangrijkste verschillen tussen RVM en rbenv?
RVM (Ruby Version Manager) en rbenv zijn beide tools om meerdere versies van Ruby te beheren op uw systeem. Het belangrijkste verschil zit in hun aanpak. RVM is rijker aan mogelijkheden en stelt u in staat om gemsets te beheren – een set van gems die worden gebruikt voor een specifiek Ruby-toepassing. Aan de andere kant is rbenv eenvoudiger en richt zich alleen op het wisselen van Ruby-versies. Het ondersteunt geen gemsets, maar u kunt vergelijkbare functionaliteit bereiken met een plugin genaamd ruby-build.
Hoe installeer ik een specifieke versie van Ruby met behulp van RVM?
Om een specifieke versie van Ruby te installeren met behulp van RVM, kunt u de ‘rvm install’ opdracht gebruiken, gevolgd door het versienummer. Als voorbeeld, om Ruby 2.6.3 te installeren, zou u de opdracht ‘rvm install 2.6.3’ gebruiken. Zodra deze is geïnstalleerd, kunt u overschakelen naar deze versie met behulp van de ‘rvm use’ opdracht, zoals ‘rvm use 2.6.3’.
Kan ik zowel RVM als rbenv op hetzelfde systeem gebruiken?
Hoewel het technisch mogelijk is om zowel RVM als rbenv op hetzelfde systeem te installeren, wordt dit over het algemeen niet aanbevolen. Beide tools wijzigen uw shell-omgeving en het hebben van beide kan leiden tot onverwacht gedrag. Het is het beste om er één te kiezen op basis van uw behoeften en erbij te blijven.
Hoe verwijder ik een Ruby-versie met behulp van rbenv?
Om een Ruby-versie te verwijderen met behulp van rbenv, kunt u de ‘rbenv uninstall’ opdracht gebruiken, gevolgd door het versienummer. Als voorbeeld, om Ruby 2.6.3 te verwijderen, zou u de opdracht ‘rbenv uninstall 2.6.3’ gebruiken.
Hoe stel ik een standaard Ruby-versie in met RVM?
Om een standaard Ruby-versie in te stellen met RVM, kun je de opdracht ‘rvm –default use’ gebruiken, gevolgd door het versienummer. Bijvoorbeeld, om Ruby 2.6.3 als standaard te instellen, zou je de opdracht ‘rvm –default use 2.6.3’ gebruiken.
Hoe werk ik rbenv en zijn plugins bij?
Om rbenv en zijn plugins bij te werken, kun je git gebruiken. Navigeer in je terminal naar de rbenv-directory (meestal ‘~/.rbenv’) en voer ‘git pull’ uit. Navigeer vervolgens naar elke plugin-directory en doe hetzelfde.
Kan ik RVM of rbenv gebruiken met andere programmeertalen?
RVM en rbenv zijn specifiek ontworpen voor het beheren van Ruby-versies. Als je versies van andere programmeertalen wilt beheren, kun je beter kijken naar tools zoals pyenv voor Python of nvm voor Node.js.
Hoe kan ik alle geïnstalleerde Ruby-versies met rbenv weergeven?
Om alle geïnstalleerde Ruby-versies met rbenv weer te geven, kun je de opdracht ‘rbenv versions’ gebruiken. Dit geeft een lijst weer van alle Ruby-versies die rbenv kan gebruiken.
Hoe geef ik gem-afhankelijkheden met RVM aan?
RVM stelt je in staat om gem-afhankelijkheden te beheren via het gebruik van gemsets. Je kunt een gemset maken met de opdracht ‘rvm gemset create’, er naar overschakelen met de opdracht ‘rvm gemset use’ en vervolgens zo nodig gems installeren.
Hoe installeer ik een nieuwe Ruby-versie met rbenv?
Om een nieuwe Ruby-versie met rbenv te installeren, kun je de opdracht ‘rbenv install’ gebruiken, gevolgd door het versienummer. Bijvoorbeeld, om Ruby 2.6.3 te installeren, zou je de opdracht ‘rbenv install 2.6.3’ gebruiken.
Source:
https://www.sitepoint.com/ruby-version-managers-macos/