Waarom zou u RVM gebruiken?

Als je eenmaal verslaafd bent aan de ontwikkeling van Ruby, zul je willen experimenteren met verschillende versies van Ruby. Op het eerste gezicht zou je denken dat het een beetje moeilijk is. RVM maakt dit een absoluut briesje. In deze zelfstudie laat ik je aan de slag met RVM.


0 - Wat is RVM?

Zonder RVM is het behoorlijk moeilijk om meer dan één versie van Ruby op je computer te hebben.

RVM staat voor Ruby enVironment Manager. Dit is het idee. Als ontwikkelaar van Ruby kom je misschien situaties tegen waarin je meerdere versies van Ruby zou moeten gebruiken. Je bent bijvoorbeeld begonnen met Ruby 1.8.6, maar nu wil je experimenteren met 1.9.2. Of u werkt normaal met de 1.9 branch, maar u wilt bijdragen aan een open source project dat nog steeds op de 1.8 branch staat.

Zonder RVM is het behoorlijk moeilijk om meer dan één versie van Ruby op je computer te hebben. Of, wat als u een van de alternatieve Ruby-tolken wilt proberen, zoals Rubinius of JRuby? Hoe kun je er één uittrekken zonder je trouwe MRI-installatie op te geven? Hier komt RVM in actie. Het is in feite een raamwerk dat meerdere installaties van Ruby voor u afhandelt, en het voor u gemakkelijk maakt om tussen hen te schakelen..

Twee voorbehouden zijn vandaag van toepassing:

  1. Je zou goed bekend moeten zijn met de opdrachtregel.

  2. U zou op een Unix-systeem moeten zijn. Dit betekent dat u waarschijnlijk Mac OS X of een versie van Linux gebruikt. Zoveel als ik wou dat RVM beschikbaar was op Windows, is het dat niet. Als u Windows gebruikt, kunt u Pik proberen; Ik begrijp dat het vergelijkbaar is, maar ik heb nog geen kans gehad om het te gebruiken.


1 - Hoe installeer ik RVM?

Het installeren van RVM is een beetje lastig. Ten eerste moet Git zijn geïnstalleerd. Download vervolgens een script en voer het uit om de installatie uit te voeren. De RVM-site beveelt het op deze manier aan:

bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

Zelfs als je redelijk comfortabel bent met de opdrachtregel, zul je waarschijnlijk pauzeren wanneer je dit ziet. Het is gemakkelijker om het achterstevoren te lezen: we gebruiken het Krul om het script te downloaden waarnaar de URL verwijst; de -s commando laat Krul weet dat je het script stil wilt downloaden (zonder enige uitvoer). Dit is het script dat RVM installeert.

Om vervolgens dit script automatisch uit te voeren, gebruiken we het dubbele less-than-teken om het script door te geven aan de opdracht aan de linkerkant van de operator. In ons geval is dat zo bash. Misschien ken je bash als een shell of de terminal die je waarschijnlijk nu gebruikt. Hiermee wordt het script uitgevoerd in een bash-shell (die in de bash-shell in uw terminal wordt uitgevoerd!).

Het bovenstaande commando downloadt en voert het script uit, dat RVM zal installeren.

Maar we zijn nog niet helemaal klaar. Om ervoor te zorgen dat RVM correct werkt, moet u het volgende fragment aan uw toevoegen ~ / .Bash_profile of ~ / .Bashrc het dossier.

[[-s "$ HOME / .rvm / scripts / rvm"]] && source "$ HOME / .rvm / scripts / rvm" # Dit laadt RVM in een shell-sessie.

Zoals je uit de opmerking ziet, laadt dit RVM in een shell-sessie. Specifiek - als je nieuwsgierig bent - laadt dit het rvm commando als een shell-functie (zoals degene die je zou kunnen toevoegen aan jouw ~ / .Bash_profile bestand), in plaats van als een binair bestand (een programma dat je in de shell uitvoert, zoals ls of robijn).

Maar denk eraan, RVM is een snelgroeiende bibliotheek en het is mogelijk dat de installatiemethode verandert. Raadpleeg de documentatie voor de meest recente manieren om RVM te installeren.

Nu we RVM hebben geïnstalleerd, laten we het daadwerkelijk gebruiken!


2 - Hoe gebruik ik RVM?

De twee grote functies die RVM aanbiedt zijn Rubies en Gemsets. Laten we deze achtereenvolgens bekijken en vervolgens naar een aantal andere aanpassingen kijken.

robijnen

Robijnen zijn de primaire (maar niet exclusieve) bedoeling van RVM; onthoud waar RVM voor staat? Ruby enVironment Manager. Dus laten we wat robijnen installeren!

Als je Ruby al een tijdje gebruikt, weet je dat er verschillende Ruby-implementaties zijn om uit te kiezen. U kunt zien welke beschikbaar zijn met RVM met behulp van deze opdracht:

rvm-lijst bekend

Bekijk trouwens deze syntaxis; de meeste RVM-opdrachten die je gebruikt zijn als volgt: rvm, een categorie en een commando voor die categorie. Voorspelbaar zal dit een lijst zijn van alle Ruby-implementaties (en versies van implementaties) die u kunt installeren.

Dus laten we een versie kiezen en het installeren. Er is echter eerst iets dat we moeten doen. Het is mogelijk dat er afhankelijkheden zijn die uw platform vereist voordat u de robijn van uw keuze kunt installeren. Ongelofelijk, RVM heeft ook hier uw rug: voer de opdracht uit rvm-notities om te zien welke afhankelijkheden u moet installeren. Het zal een lijst maken met de verschillende robijnen die u kunt installeren en wat u als eerste voor elk van hen zou moeten installeren.

Ik gebruik meestal alleen Ruby 1.9.2, dus laten we dat installeren. Gebruik de opdracht om een ​​Ruby te installeren rvm installeren, gevolgd door de implementatie en versie die u zoekt, zoals vermeld bij rvm-lijst bekend.

rvm installeer ruby-1.9.2-p180

Je kunt zoveel versies van Ruby installeren als je wilt, gewoon door deze opdracht te gebruiken.

Het duurt een paar minuten voordat deze opdracht wordt uitgevoerd, maar zodra deze is voltooid, wordt de versie van de geselecteerde robijn op uw computer geïnstalleerd..

Je kunt zoveel versies van Ruby installeren als je wilt door deze opdracht te gebruiken. Maar nu u meer dan één versie hebt geïnstalleerd, hoe gebruikt u ze of schakelt u ze om? En hoe zit het met de Ruby-implementatie die waarschijnlijk met uw computer is gekomen??

Het is vrij eenvoudig. Gebruik deze opdracht om een ​​gegeven Ruby te gebruiken:

gebruik van rvm  # in abstract gebruik van 1.9.2-p180 gebruiken

Als dat is alles wat je doet, zul je dat telkens moeten typen als je een terminal opent; anders ga je standaard naar de ingebouwde Ruby. Voeg de vlag toe om dit te voorkomen --standaard. Dit geeft je ook een snelkoppeling om op elk moment terug te schakelen naar je standaard Ruby; als je bent overgeschakeld naar een andere Ruby, typ je gewoon rvm standaard om terug te schakelen.

Gebruik de juiste versie om te controleren of u de juiste versie gebruikt ruby -v; je zou de versie van Ruby moeten zien die het zojuist geselecteerde gebruikt.

Als je een paar verschillende robijnen gebruikt, wil je bijhouden wat je hebt; daarom heb je de rvm-lijst commando. Dit is mijn huidige inventaris:

 ruby-1.8.7-p302 [x86_64] robijn-1.8.7-p334 [x86_64] robijn-1.9.2-p0 [x86_64] robijn-1.9.2-p180 [x86_64]

Zoals u wellicht vermoedt, is de => naast de laatste betekent dat degene die ik momenteel gebruik.

Als je een Ruby wilt verwijderen, is het net zo gemakkelijk. Gebruik rvm verwijderen om zich te ontdoen van alles met betrekking tot die Ruby. Als je denkt dat je die Ruby in de toekomst misschien opnieuw wilt installeren, gebruik dan gewoon rvm verwijdering; dit laat de broncode en andere stukken op hun plaats.

Gemsets

Hoewel meerdere robijnen cool zijn, zijn edelstenen - althans voor mij - waar het is. Kortom, een edelsteen is een verzameling edelstenen die je exclusief (of bijna uitsluitend) gebruikt. Dit is geweldig in twee gevallen:

  1. U wilt verschillende versies van een bepaalde edelsteen gebruiken, waarschijnlijk met verschillende versies van Ruby.
  2. Wil je? Sandbox? je edelstenen, dus alleen bepaalde edelstenen zijn beschikbaar op een bepaald moment.

Laten we kijken hoe dit werkt.

rvm gemset maken 

Natuurlijk ben je vrij om je gemset te noemen, wat je maar wilt. Gebruik om al uw edelstenen te zien rvm gemset lijst. Als je dit nu doet, zie je twee edeletsets (ervan uitgaande dat je alleen het bovenstaande commando hebt uitgevoerd). Eén zal zijn (of hoe je het ook noemt) en globaal. De globaal gemset is een speciale; zoals je waarschijnlijk wel kunt raden, de edelstenen in de globaal gemset zijn beschikbaar, ongeacht welke gemset je gebruikt.

Je kunt het voordeel hiervan zien: er zijn enkele edelstenen die je altijd wilt, ongeacht wat je doet. Echt, er is nog een gemset, de standaard gemset, die niet wordt vermeld en geen naam heeft. Als je geen specifieke edelsteen gebruikt, heb je de edelstenen in de standaard gemset (en natuurlijk de wereldwijde edelsteen) beschikbaar.

Je kunt je verzameling edelstenen zien met behulp van de opdracht rvm gemset lijst; zoals eerder, => markeert de edelsteen die u momenteel gebruikt. Als er geen gemset is gemarkeerd, gebruikt u de standaard gemset.

Niets is eenvoudiger dan van edelsteen veranderen:

rvm gemset gebruik 

Zodra u een bepaalde edelsteenset gebruikt, kunt u edelstenen installeren met edelsteen installeer gem-naam. Er staat hier een belangrijke opmerking. Niet gebruiken sudo bij het installeren van dat; dit doet volledig buiten beschouwing dat RVM de show hier uitvoert en deze installeert op het hele systeem, buiten de RVM-omgeving. Dus doe gewoon edelsteen installeer gem-naam.

Zoals eerder vermeld, worden de standaard en globale edelstenen gemaakt wanneer u een nieuwe Ruby installeert. Als je bepaalde edelstenen hebt die je standaard wilt installeren bij het installeren van een nieuwe Ruby, voeg je ze toe aan het juiste edelstenenbestand. In ~ / .Rvm / gemsets /, je zult twee bestanden vinden: default.gems en global.gems. Vermeld gewoon de edelstenen op naam, een van elke regel. Deze edelstenen worden geïnstalleerd in de juiste edelsteenset wanneer u een nieuwe robijn installeert.

Deze edelstenen-bestanden zijn ook een geweldige manier om een ​​lijst met edelstenen op te slaan. Je kunt een edelsteen exporteren met rvm gemset exporteren; Hiermee wordt een lijst met edelstenen in de huidige gemset opgeslagen als default.gems in welke map je je nu bevindt. Als je dit bestand een specifieke naam wilt geven, voeg je het aan het einde van die opdracht toe. Vervolgens kunt u die lijst met edelstenen importeren in een andere Ruby of zelfs op een andere computer (denk eraan om de broncode te controleren) met de rvm gemset importeert gem-list-bestandsnaam.

Nog iets over edelstenen: je kunt ze gebruiken in jouw gebruik van rvm commando's. Doe dit:

 gebruik van rvm @

.rmvrc Bestanden

.rvmrc-bestanden zijn echt cool. Beschouw ze als het instellingenpaneel van RVM. U kunt een .rvmrc-bestand op drie verschillende plaatsen hebben: / Etc / rvmrc stelt opties in voor het hele systeem; ~ / .Rvmrc stelt opties in voor de huidige gebruiker; een .rvmrc bestand in een specifieke map past dingen aan voor dat project.

De global en gebruiker .rvmrc bestanden zijn voornamelijk compileeropties voor het installeren van nieuwe robijnen. Echter, het project specifiek .rvmrc bestanden zijn de leuke.

Dit is hoe je het doet: wanneer je een nieuw project start, zul je weten wat je moet maken .rvmrc bestand in die map. Laten we zeggen dat je een rails-app hebt die Ruby 1.8.6 nodig heeft om te worden uitgevoerd; je hebt Ruby 1.9.2 als standaard, en je wilt niet dat je moet onthouden om over te schakelen naar Rubies als je aan dat project werkt. Typ deze opdracht dus:

 rvm --rvmrc - maak 1.8.6-p334 aan

Dit zal een zwaar commentaar geven .rmvrc bestand dat uw Ruby-omgeving naadloos zal veranderen wanneer u naar die map overschakelt. Zorg ervoor dat u de opmerkingen daar leest om te zien wat er precies wordt gedaan om van omgeving te veranderen en wat u ermee kunt doen .rmvrc bestanden.

Met edelstenen wordt het nog beter. Ik gebruik Ruby 1.9.2 voor al mijn projecten, maar ik wil graag een ander juweeltje voor elk project. Dus als ik een project heb dat wordt genoemd superproj, Ik kan dit doen:

 rvm --rvmrc --maken 1.9.2@superproj

Voeg gewoon een at-sign toe na de Ruby-naam en volg dat met je gemset-naam. Zoals verwacht, laadt dit naadloos de juiste edelstenen voor dat project. Als deze edelsteen nog niet is gemaakt, zal RVM dat ook voor u doen.

Snelle aanpassing

Het is mogelijk dat je wilt weten welke robijn en edelsteen je op dit moment gebruikt. Er zijn twee manieren om dit te doen: ten eerste kunt u gewoon de opdracht gebruiken rvm info. Dit zal je vertellen welke robijn en edelsteen je gebruikt (naast vele andere dingen).

Als u iets meer permanent wilt, kunt u de naam direct in uw prompt plaatsen. Om dit te doen, voegt u een regel toe aan uw ~ / .Bash_profile. Het voorbeeld dat de RVM-documentatie geeft is dit:

 PS1 = "\ $ (~ / .rvm / bin / rvm-prompt) $ PS1"

Wat dit doet is het script uitvoeren ~ / .Rvm / bin / RVM-prompt en zet de output in je prompt (vervolgens voegt het toe wat je prompt momenteel aan het einde is). Hierdoor worden de naam van de robijn en de naam van de edelsteen aan het begin van uw prompt weergegeven. Sterker nog, als u bekend bent met het aanpassen van uw prompt, bekijk dan de documentatie voor meer manieren om die uitvoer aan te passen.


Conclusie: veel plezier ermee!

Ik hoop dat ik goed genoeg heb aangetoond dat er echt geen reden is om RVM niet te gebruiken als je in een Unix-box zit. Persoonlijk heb ik het nog niet nodig gevonden om meer dan één interpreter / versie van Ruby te gebruiken, maar ik vind de edelstenen en projectspecifieke .rvmrc bestanden zijn ongelooflijk handig.

Maar er is meer te leren over RVM dan ik hier heb laten zien. Lees voor meer informatie de uitstekende documentatie. En laat me weten in de comments als je vragen hebt.