Varför ska du använda RVM

När du är beroende av Ruby-utveckling, kommer du att vilja experimentera med olika versioner av Ruby. Vid första rodnad kanske du tror att det är lite svårt. RVM gör detta till en absolut bris. I denna handledning kommer jag att få dig igång med RVM.


0 - Vad är RVM?

Utan RVM är det ganska svårt att ha mer än en version av Ruby på din dator.

RVM står för Ruby enVironment MINNESHANTERARE. Här är idén. Som en Ruby-utvecklare kan du stöta på situationer där du behöver använda flera versioner av Ruby. Till exempel började du med Ruby 1.8.6, men nu vill du experimentera med 1.9.2. Eller du arbetar normalt med 1,9-filialen, men du vill bidra till ett open source-projekt som fortfarande ligger på 1,8-filialen.

Utan RVM är det ganska svårt att ha mer än en version av Ruby på din dator. Eller, om du vill prova en av de alternativa Ruby-tolkarna, som Rubinius eller JRuby? Hur kan du ta en ut för en snurra utan att ge upp din trofasta MRI-installation? Det är här RVM går in. Det är i grunden en ram som hanterar flera installationer av Ruby för dig och gör det enkelt för dig att växla mellan dem.

Två försök gäller idag:

  1. Du borde vara ganska bekant med kommandoraden.

  2. Du borde vara på ett Unix-system. Det betyder att du förmodligen kör antingen Mac OS X eller någon version av Linux. Så mycket som jag önskar att RVM var tillgängligt på Windows, så är det inte. Om du är på Windows kan du prova Pik; Jag förstår att det är liknande, men jag har inte haft chans att använda den än.


1 - Hur installerar jag RVM?

Installera RVM är lite besvärligt. Först måste du ha Git installerat. Sedan laddar du ner ett skript och kör det för att utföra installationen. RVM-webbplatsen rekommenderar att du gör det så här:

våldsamt slag < <(curl -s https://rvm.beginrescueend.com/install/rvm)

Även om du är ganska bekväm med kommandoraden kommer du förmodligen att pausa när du ser detta. Det är lättare att läsa det bakåt: vi använder ringla att ladda ner det skript som webbadressen pekar på; de -s kommandot låter ringla vet att du vill ladda ner skriptet tyst (utan någon utgång). Detta är skriptet som installerar RVM.

För att köra detta skript automatiskt använder vi dubbelt mindre än tecknet för att skicka manuset till kommandot på operatorns vänstra sida. Det är i vårt fall våldsamt slag. Du kanske vet bash som ett skal, eller den terminal som du förmodligen kör nu. Detta kör skriptet i ett bash-skal (som löper inuti bash-skalet i din terminal!).

Kommandot över nedladdningar och kör scriptet, som kommer att installera RVM.

Men vi är inte färdiga ännu. För att säkerställa att RVM körs korrekt måste du lägga till följande kod i din ~ / .Bash_profile eller ~ / .Bashrc fil.

[[-s "$ HOME / .rvm / scripts / rvm"]] && source "$ HOME / .rvm / scripts / rvm" # Det här laddar RVM till en shell session.

Som du ser från kommentaren, laddar detta RVM till en shell session.? Specifikt - om du är nyfiken - det här laddar RVM kommandot som en skalfunktion (som de du kan lägga till i din ~ / .Bash_profile fil), istället för som ett binärt (ett program som du kör i skalet, som ls eller rubin).

Men kom ihåg, RVM är ett snabbt växande bibliotek, och det är möjligt att installationsmetoden kommer att förändras. För de mest aktuella sätten att installera RVM, kolla dokumentationen.

Nu när vi har installerat RVM, låt oss faktiskt använda den!


2 - Hur använder jag RVM?

De två stora funktionerna som RVM erbjuder är Rubies och Gemsets. Låt oss titta på var och en av dessa i sin tur och titta på några andra anpassningar.

rubiner

Rubiner är den primära (men inte exklusiva) avsikten för RVM; kom ihåg vad RVM står för? Ruby enVironment MINNESHANTERARE. Så, låt oss installera några rubiner!

Om du har använt Ruby ett tag kommer du att veta att det finns flera olika Ruby-implementeringar att välja mellan. Du kan se vilka som är tillgängliga med RVM genom att använda det här kommandot:

rvm lista känd

Förresten, ta en titt på denna syntax; De flesta av de RVM-kommandon du ska använda är så här: RVM, en kategori och ett kommando för den kategorin. Förutsägbart kommer detta att lista alla Ruby-implementeringar (och versioner av implementeringar) som du kan installera.

Så låt oss välja en version och installera den. Det finns dock något vi bör göra först. Det kan hända att det finns vissa avhängigheter som din plattform kräver innan du kan installera rubin efter eget val. Otroligt, RVM har också din rygg här: kör kommandot rvm anteckningar för att se vilka beroenden du ska installera. Det kommer att lista de olika rubiner du kan installera, och vad du ska installera först för var och en av dem.

Jag använder allmänt uteslutande Ruby 1.9.2, så låt oss installera det. För att installera en Ruby, använd kommandot rvm installera, följt av den implementering och version du vill ha, som anges med rvm lista känd.

rvm installera ruby-1.9.2-p180

Du kan installera så många versioner av Ruby som du vill bara genom att använda det här kommandot.

Kommandot tar några minuter att köra, men när det är klart har du den version av rubin du valde installerad på din dator.

Du kan installera så många versioner av Ruby som du vill genom att använda det här kommandot. Men nu när du har installerat mer än en version, hur använder du dem eller växlar mellan dem? Också vad sägs om Ruby-implementeringen som troligtvis kom med din dator?

Det är ganska enkelt. Använd följande kommando för att använda en given Ruby:

rvm användning  # i abstrakt rvm använd 1.9.2-p180

Om det är allt du gör, måste du skriva att varje gång du öppnar en terminal; annars kommer du som standard till den inbyggda Ruby. För att undvika detta, lägg till flaggan --standard. Detta ger dig också en genväg för att växla tillbaka till din standard Ruby när som helst; om du har bytt till en annan ruby ​​skriver du bara in rvm standard att växla tillbaka.

För att vara säker på att du använder rätt version, skriv rubin -v; Du borde se versionen av Ruby som bara används.

Om du använder några olika Rubies, vill du hålla reda på vad du har; det är därför du har rvm lista kommando. Här är min nuvarande inventering:

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

Som du kanske gissar, => bredvid den sista betyder det det jag använder för närvarande.

Om du vill ta bort en Ruby är det lika enkelt. Använda sig av rvm ta bort att bli av med allt som rör Ruby. Om du tror att du kanske vill installera Ruby igen i framtiden, använd bara rvm avinstallera; Detta lämnar källkoden och andra delar på plats.

Gemsets

Medan flera Rubies är coola, ädelstenar - åtminstone för mig - är där den är på. I grund och botten är en pärla en uppsättning pärlor som du använder exklusivt (eller nästan uteslutande). Det här är bra i två fall:

  1. Du vill använda olika versioner av en viss pärla, förmodligen med olika versioner av Ruby.
  2. Vill du ha? Sandlåda? dina pärlor, så bara vissa pärlor är tillgängliga vid en given tidpunkt.

Låt oss se hur det här fungerar.

rvm gemset skapa 

Naturligtvis är du fri att namnge din gemset vad du vill. För att se alla dina pärlor, använd rvm gemset lista. Om du gör det nu ser du två smycken (förutsatt att du bara har kört kommandot ovan). En kommer att bli (eller vad du kallade det) och global. De global gemset är en speciell; som du antagligen kan gissa, ädelstenarna i global gemset finns tillgängliga oavsett vilken gemset du använder.

Du kan se nytta för detta: det finns några pärlor du bara vill ha, oavsett vad du gör. Egentligen finns det en annan gemset, standard gemset, som inte är listad och har inget namn. Om du inte använder en viss pärm, har du pärlorna i standardmallen (och naturligtvis den globala pärmserien).

Du kan se din uppsättning pärlor genom att använda kommandot rvm gemset lista; som förut, => markerar den gemset du använder för tillfället. Om ingen gemset är markerad använder du standardmallen.

Ingenting kan vara enklare än att byta smycken:

rvm gemset användning 

När du har använt en viss gems kan du installera ädelstenar med pärla installera pärlemenyn. Det finns en viktig anteckning här. Använd inte sudo när du installerar det gör det helt och hållet bortse från att RVM kör showen här och installerar den till hela systemet, utanför RVM-miljön. Så, gör bara pärla installera pärlemenyn.

Som nämnts skapas standard och globala pärlor när du installerar en ny Ruby. Om du har vissa pärlor som du vill installera som standard när du installerar en ny Ruby, lägg till dem i den lämpliga pärlfilen. I ~ / .Rvm / gemsets /, du hittar två filer: default.gems och global.gems. Bara lista ädelstenar med namn, en av varje rad. Dessa pärlor kommer att installeras i lämplig gemset när du installerar en ny Ruby.

Dessa ädelstenar är också ett bra sätt att lagra en lista med ädelstenar. Du kan exportera en gemset med rvm gemset export; Detta kommer att spara en lista över ädelstenarna i den aktuella gemset som default.gems i vilken mapp du är för närvarande. Om du vill ge den här filen ett visst namn, lägg bara till det i slutet av det här kommandot. Då kan du importera den listan med ädelstenar i en annan Ruby eller till och med på en annan dator (tänk på att kontrollera den i källkontrollen) med rvm gemset importera gem-list-fil-namn.

Ännu en sak om ädelstenar: du kan använda dem i din rvm användning kommandon. Gör det här:

 rvm användning @

.rmvrc-filer

.rvmrc filer är riktigt coola. Tänk på dem på inställningspanelen för RVM. Du kan ha en .rvmrc-fil på tre olika platser: / Etc / rvmrc ställer in alternativ för hela systemet; ~ / .Rvmrc ställer in alternativ för den nuvarande användaren; en .rvmrc filen i en specifik katalog anpassar saker för det projektet.

Den globala och användaren .rvmrc filer är i huvudsak kompilera alternativ för installation av nya Rubies. Men det projektspecifika .rvmrc filer är de roliga.

Så här gör du det: när du startar ett nytt projekt, ska du skapa en .rvmrc filen i den katalogen. Låt oss säga att du har en railsapp som behöver Ruby 1.8.6 att springa; Du har Ruby 1.9.2 som standard, och du vill inte komma ihåg att byta Rubies när du arbetar med det projektet. Skriv så här kommandot:

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

Detta kommer att skapa en stark kommentar .rmvrc fil som kommer att ändra din Ruby-miljö sömlöst när du växlar till den katalogen. Var noga med att läsa kommentarerna där inne för att se vad som exakt görs för att byta miljöer och vad du kan göra med .rmvrc filer.

Det blir ännu bättre med ädelstenar. Jag använder Ruby 1.9.2 för alla mina projekt, men jag gillar att ha en annan gemset för varje projekt. Så, om jag har ett projekt som heter superproj, Jag kan göra det här:

 rvm --rvmrc --create 1.9.2@superproj

Lägg bara till ett på-tecken efter Ruby-namnet och följ det med ditt namn på gemstnamnet. Som förväntat, kommer detta sömlöst att ladda de rätta pärlorna för det projektet. Om det inte har skapats den här rutformen kommer RVM att göra det för dig också.

Snabb anpassning

Det är möjligt att du vill ta reda på vad rubin och gemset du använder för närvarande. Det finns två sätt att göra detta: för det första kan du bara använda kommandot rvm info. Detta kommer att berätta vad rubin och gemset du använder (bland många andra saker).

Om du vill ha något mer permanent kan du ställa in namnet direkt till din prompten. För att göra detta, lägg till en rad i din ~ / .Bash_profile. Exemplet som RVM-dokumentationen ger är detta:

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

Vad detta gör är att skriptet körs ~ / .Rvm / bin / RVM-prompten och sätt utmatningen till din prompten (sedan lägger den till sig vad din prompten för närvarande är i slutet). Detta kommer att sätta rubin namnet och gemset namn i början av din prompt. Ännu bättre, om du är bekant med att anpassa din prompten, kolla in dokumentationen för fler sätt att anpassa den utmatningen.


Slutsats: Ha kul med det!

Jag hoppas jag har visat tillräckligt bra att det verkligen finns ingen anledning att inte använda RVM om du är i en Unix-låda. Personligen har jag ännu inte funnit det nödvändigt att använda mer än en tolk / version av Ruby, men jag hittar ädelstenar och projektspecifika .rvmrc filer är otroligt praktiska.

Men det finns mer att lära om RVM än jag har visat här. För mer utbildning, var noga med att kolla in den utmärkta dokumentationen. Och låt mig veta i kommentarerna om du har några frågor.