Hvorfor du bør bruke RVM

Når du er avhengig av Ruby-utvikling, vil du prøve å eksperimentere med forskjellige versjoner av Ruby. Ved første rødme kan du tenke at det er litt vanskelig. RVM gjør dette til en absolutt bris. I denne opplæringen skal jeg få deg i gang med RVM.


0 - Hva er RVM?

Uten RVM er det ganske vanskelig å ha mer enn en versjon av Ruby på datamaskinen.

RVM står for Ruby enVironment Manager. Her er ideen. Som en Ruby-utvikler kan du komme til situasjoner der du må bruke flere versjoner av Ruby. For eksempel startet du med Ruby 1.8.6, men nå vil du eksperimentere med 1.9.2. Eller, du jobber vanligvis med 1,9-grenen, men du vil bidra til et åpen kildekode-prosjekt som fortsatt ligger på 1,8-grenen.

Uten RVM er det ganske vanskelig å ha mer enn en versjon av Ruby på datamaskinen. Eller hva om du vil prøve en av de alternative Ruby-tolkene, som Rubinius eller JRuby? Hvordan kan du ta en ut for et snurre uten å gi opp din trofaste MRI-installasjon? Det er her RVM går inn. Det er i utgangspunktet et rammeverk som håndterer flere installasjoner av Ruby for deg, og gjør det enkelt for deg å bytte mellom dem.

To forbehold gjelder i dag:

  1. Du bør være ganske kjent med kommandolinjen.

  2. Du bør være på et Unix-system. Dette betyr at du sannsynligvis kjører enten Mac OS X eller en versjon av Linux. Så mye som jeg ønsket at RVM var tilgjengelig på Windows, er det ikke. Hvis du er på Windows, kan du prøve Pik; Jeg forstår at det er lik, men jeg har ikke hatt mulighet til å bruke den enda.


1 - Hvordan installerer jeg RVM?

Installere RVM er litt vanskelig. Først må du ha Git installert. Deretter laster du ned et skript, og kjører det for å utføre installasjonen. RVM-stedet anbefaler å gjøre det på denne måten:

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

Selv om du er ganske komfortabel med kommandolinjen, vil du sannsynligvis sette pause når du ser dette. Det er lettere å lese det bakover: vi bruker curl å laste ned skriptet som nettadressen peker på; de -s kommandoen lar curl vet at du vil laste ned skriptet stille (uten utgang). Dette er skriptet som installerer RVM.

Så, for å kjøre dette skriptet automatisk, bruker vi det dobbelte mindre enn tegn for å sende skriptet til kommandoen på operatørens venstre side. I vårt tilfelle er det det bash. Du kan kanskje vite bash som et skall, eller terminalen som du sannsynligvis kjører akkurat nå. Dette kjører skriptet i en bash shell (som kjører inne i bash shell i terminalen din!).

Kommandoen over nedlastinger og kjører skriptet, som vil installere RVM.

Men vi er ikke ferdige helt ennå. For å sikre at RVM kjøres riktig, må du legge til følgende kodeboks til din ~ / Bash_profile eller ~ / .Bashrc fil.

[[-s "$ HOME / .rvm / scripts / rvm"]] && kilde "$ HOME / .rvm / scripts / rvm" # Dette laster RVM inn i en shell-sesjon.

Som du ser fra kommentaren, laster dette RVM inn i en shell-sesjon.? Spesielt - hvis du er nysgjerrig - dette laster RVM kommandoen som en shell-funksjon (som de du kan legge til i din ~ / Bash_profile fil), i stedet for som en binær (et program som du kjører i skallet, liker ls eller rubin).

Men husk, RVM er et raskt voksende bibliotek, og det er mulig at installasjonsmetoden vil endres. For de mest oppdaterte måtene å installere RVM, sjekk dokumentasjonen.

Nå som vi har RVM installert, la oss faktisk bruke den!


2 - Hvordan bruker jeg RVM?

De to store funksjonene som RVM tilbyr, er Rubies og Gemsets. La oss se på hver av disse igjen, og se på noen andre tilpasninger.

rubies

Rubiner er den primære (men ikke eksklusive) hensikten med RVM; husk hva RVM står for? Ruby enVironment Manager. Så, la oss installere noen rubiner!

Hvis du har brukt Ruby en stund, vet du at det er flere forskjellige Ruby-implementeringer å velge mellom. Du kan se hvilke som er tilgjengelige med RVM ved å bruke denne kommandoen:

rvm liste kjent

Forresten, ta en titt på denne syntaksen; De fleste RVM-kommandoene du vil bruke er som dette: RVM, en kategori og en kommando for den kategorien. Forutsigbart vil dette liste alle Ruby-implementeringer (og versjoner av implementeringer) som du kan installere.

Så la oss velge en versjon og installere den. Det er imidlertid noe vi bør gjøre først. Det er mulig at det kan være noen avhengigheter som plattformen din krever før du kan installere rubin av ditt valg. Utrolig, RVM har også ryggen din her: Kjør kommandoen rvm notater for å se hvilke avhengigheter du bør installere. Det vil liste de forskjellige rubiene du kan installere, og hva du bør installere først for hver av dem.

Jeg bruker generelt bare Ruby 1.9.2, så la oss installere det. For å installere en Ruby, bruk kommandoen rvm installasjon, etterfulgt av implementeringen og versjonen du vil ha, som oppført med rvm liste kjent.

rvm installere ruby-1.9.2-p180

Du kan installere så mange versjoner av Ruby som du vil bare ved å bruke denne kommandoen.

Denne kommandoen tar noen minutter å kjøre, men når det er gjort, har du den versjonen av rubin du valgte installert på datamaskinen din.

Du kan installere så mange versjoner av Ruby som du vil, ved å bruke denne kommandoen. Men nå har du installert mer enn en versjon, hvordan bruker du dem, eller bytter mellom dem? Også, hva med Ruby-implementeringen som sannsynligvis kom med datamaskinen din?

Det er ganske enkelt. For å bruke en gitt Ruby, bruk denne kommandoen:

rvm bruk  # i abstrakt rvm bruk 1.9.2-p180

Hvis det er alt du gjør, må du skrive at hver gang du åpner en terminal; Ellers vil du standardisere den innebygde Ruby. For å unngå dette, legg til flagget --misligholde. Dette gir deg også en snarvei til å bytte tilbake til standard Ruby når som helst; hvis du har byttet til en annen ruby, skriv bare inn rvm standard å bytte tilbake.

For å være sikker på at du bruker riktig versjon, skriv inn rubin -v; Du bør se versjonen av Ruby som bruker bare valgt.

Hvis du bruker noen forskjellige Rubies, vil du holde rede på hva du har; det er derfor du har rvm liste kommando. Her er min nåværende beholdning:

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

Som du kanskje gjetter, => ved siden av den siste betyr det at jeg bruker den.

Hvis du vil fjerne en Ruby, er det like enkelt. Bruk rvm fjerne å bli kvitt alt relatert til den Ruby. Hvis du tror at du kanskje vil installere Ruby igjen i fremtiden, bruk bare rvm avinstallere; Dette etterlater kildekoden og andre stykker på plass.

Gemsets

Mens flere Rubies er kule, er perler - i hvert fall for meg - hvor det er på. I utgangspunktet er en gemset et sett med perler som du bruker utelukkende (eller nesten utelukkende). Dette er bra i to tilfeller:

  1. Du vil bruke forskjellige versjoner av en gitt perle, sannsynligvis med forskjellige versjoner av Ruby.
  2. Du vil? Sandkasse? edelstenene dine, så bare enkelte edelstener er tilgjengelige på et gitt tidspunkt.

La oss se hvordan dette virker.

rvm gemset create 

Selvfølgelig er du fri til å nevne din gemset hva du vil. For å se alle dine edelstener, bruk rvm gemset liste. Hvis du gjør dette nå, vil du se to perler (forutsatt at du bare har kjørt kommandoen ovenfor). En vil være (eller hva du kalte det) og global. De global gemset er en spesiell; som du sikkert kan gjette, edelstener i global gemset er tilgjengelig uansett hvilken gemset du bruker.

Du kan se nytte for dette: det er noen perler du bare vil ha, uansett hva du gjør. Virkelig, det er en annen gemset, standard gemset, som ikke er oppført og ikke har et navn. Hvis du ikke bruker en bestemt gemset, har du edelstenene i standardmikset (og selvfølgelig den globale gemset) tilgjengelig.

Du kan se settet med edelstener ved hjelp av kommandoen rvm gemset liste; som før, => markerer gemset du bruker for øyeblikket. Hvis ingen gemset er merket, bruker du standardmottakeren.

Ingenting kan være enklere enn å bytte perler:

rvm gemset bruk 

Når du bruker en gitt gemsett, kan du installere edelstener med perle installasjon perle navn. Det er et viktig notat her. Ikke bruk sudo når du installerer det gjør det helt negativt at RVM driver showet her og installerer det til hele systemet, utenfor RVM-miljøet. Så, gjør bare perle installasjon perle navn.

Som nevnt, blir standard og globale perler opprettet når du installerer en ny Ruby. Hvis du har visse edelstener som du vil installere som standard når du installerer en ny Ruby, legger du dem til den aktuelle edelstenfilen. I ~ / .Rvm / gemsets /, du finner to filer: default.gems og global.gems. Bare oppfør perlene med navn, en av hver linje. Disse edelstenene vil bli installert i riktig sett når du installerer en ny Ruby.

Disse juvelene er også en fin måte å lagre en liste over edelstener på. Du kan eksportere en gemset med rvm gemset eksport; Dette vil lagre en liste over edelstenene i gjeldende søtsett som default.gems i hvilken mappe du er i. Hvis du vil gi denne filen et bestemt navn, legg det bare til ved slutten av den kommandoen. Deretter kan du importere den listen med perler i en annen Ruby eller til og med på en annen datamaskin (tenk å sjekke det i kildekontrollen) med rvm gemset import gem-list-fil-navn.

En ting til edelstener: Du kan bruke dem i din rvm bruk kommandoer. Gjør dette:

 rvm bruk @

.rmvrc filer

.rvmrc filer er veldig kule. Vurder dem innstillingspanelet til RVM. Du kan ha en .rvmrc-fil på tre forskjellige steder: / Etc / rvmrc setter alternativer for hele systemet; ~ / .Rvmrc angir alternativer for den nåværende brukeren; en .rvmrc fil i en bestemt katalog tilpasser ting for det prosjektet.

Den globale og brukeren .rvmrc filer er hovedsakelig kompilere alternativer for å installere nye rubies. Men det prosjektspesifikke .rvmrc filer er de morsomme.

Slik gjør du det: Når du starter et nytt prosjekt, skal du lage en .rvmrc filen i den katalogen. La oss si at du har en skinnerapp som trenger Ruby 1.8.6 å løpe; du har Ruby 1.9.2 som standard, og du vil ikke huske å bytte Rubies når du jobber med det prosjektet. Så skriv inn denne kommandoen:

 rvm - rvmrc - opprett 1,8,6-p334

Dette vil skape en tung kommentar .rmvrc fil som vil endre ditt Ruby-miljø sømløst når du bytter til katalogen. Husk å lese kommentarene der inne for å se hva som gjøres for å bytte miljø, og hva du kan gjøre med .rmvrc filer.

Det blir enda bedre med edelstener. Jeg bruker Ruby 1.9.2 for alle mine prosjekter, men jeg liker å ha en annen gemset for hvert prosjekt. Så, hvis jeg har et prosjekt som heter superproj, Jeg kan gjøre dette:

 rvm --rvmrc --create 1.9.2@superproj

Bare legg til et på-tegn etter Ruby-navnet og følg det med ditt navn på gemsettet. Som forventet vil dette sømløst laste inn de riktige edelstenene for det prosjektet. Hvis denne gemset ikke er opprettet ennå, vil RVM gjøre det for deg også.

Spørtilpasning

Det er mulig at du vil finne ut hva rubin og gemset du bruker for øyeblikket. Det er to måter å gjøre dette på: For det første kan du bare bruke kommandoen rvm info. Dette vil fortelle deg hva rubin og gemset du bruker (blant mange andre ting).

Hvis du vil ha noe mer permanent, kan du sette navnet rett inn i spørringen din. For å gjøre dette, legg til en linje til din ~ / Bash_profile. Eksemplet som RVM-dokumentasjonen gir, er dette:

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

Hva dette gjør er å kjøre skriptet ~ / .Rvm / bin / RVM-prompt og legg utgangen til din prompte (da legger den til det du har spørsmål om, er på slutten). Dette vil sette rubinnavnet og gemsetnavnet i begynnelsen av spørringen din. Enda bedre, hvis du er kjent med å tilpasse spørringen din, kan du sjekke dokumentasjonen for flere måter å tilpasse den utdataen.


Konklusjon: Ha det gøy med det!

Jeg håper jeg har vist godt nok at det er egentlig ingen grunn til ikke å bruke RVM hvis du er i en Unix-boks. Personlig har jeg ennå ikke funnet det nødvendig å bruke mer enn en tolk / versjon av Ruby, men jeg finner perler og prosjektspesifikke .rvmrc filer for å være utrolig praktisk.

Men det er mer å lære om RVM enn jeg har vist her. For mer utdanning, sørg for å sjekke ut den gode dokumentasjonen. Og gi meg beskjed i kommentarene hvis du har spørsmål.