10 porad o… RVM

RVM to narzędzie, bez którego ciężko sobie wyobrazić pracę z Rubym. Począwszy od instalacji języka, przez szybkie i wygodne przełącznie się między różnymi konfiguracjami, a na eksperymentowaniu z najnowszymi wydaniami kończcc. Oto 10 porad, które przydadzą się przy codziennej pracy z RVM. Jeśli nie wiesz dlaczego warto korzystać z RVM, zajrzyj do artykułu opisującego Ruby Virtual Machine.

1. .rvmrc

Plik .rvmrc uważam za niezbędny w codziennej pracy z RVM. Jeśli w dowolnym katalogu umieścisz plik .rvmrc, to przy wejściu do tego katalogu, automatycznie zostanie załadowana odpowiednia wersja rubiego i gemset. Bardzo szybko można utworzyć taki plik poleceniem:

echo 'rvm use 1.9.2@projekt_x' > .rvmrc

Utworzony zostanie plik o zawartości:

rvm use 1.9.2@projekt_x

Teraz przy każdym wejściu do tego katalogu ładowana będzie wersja rubiego 1.9.2 z gemsetem projekt_x.

2. Globalny gemset

Zazwyczaj dla każdego projektu tworzę osobny gemset, zazwyczaj potrzebuję wtedy bundlera, by zainstalować potrzebne gemy, niestety bundlera trzeba za każdym razem instalować wcześniej ręcznie. RVM dostarcza globalnych gemsetów, dla każdego zainstalowanego intepretera. Użycie komend:

rvm use gemset global
gem install bundler

sprawi, że w każdym gemsecie w danej wersji rubiego bundler będzie dostępny.

3. Importowanie/eksportowanie gemsetów

Jeśli chcesz stworzyć zapisać aktualny gemset, możesz wyeksportować listę gemów do pliku. Możliwe jest kilka sposobów.

# eksportuje aktualny gemset do pliku defaults.gem
rvm gemset export     

# eksportuje konkrenty gemset do pliku projekt_x.gem
rvm 1.9.2@projekt_x   

# eksportuje aktualny gemset do pliku projekt_x.gem
rmv gemset export projekt_x.gem 

Importowanie pliku jest zgodne z konwencją:

rvm gemset import projekt_x

Polecenie to zaimportuje gemy z pliku projekt_x.gems do aktualnego gemsetu.

4. Kopiowanie gemsetów między róznymi wersjami Rubiego

Kopiowanie może się odbyć również bez importowania i eksportowania. Wystarczy jedno polecenie.

rvm gemset copy 1.8.7@rails3 1.9.2-head@rails3

5. Rubinius i inne wersje Rubiego.

RVM daje Ci szansę bezproblemowego zainstalowania rzedziej używanych wersji, takich jak Rubinius, lub Jruby. Wpisz:

rvm install rbx

I zobacz jak twój projekt zachowuje się z Rubiniusem, tak to jest takie proste. Pełna lista obsługiwanych interpreterów dostępna jest na oficjalnej stronie RVM.

6. Haki (hooks)

Możliwe jest zdefiniowanie akcji, które zostaną wywołane przed i po określonych komendach RVMa, takich jak after_use before_install, after_install, after_do oraz after_cd. Na przykład można utworzuć plik ~/.rvm/hooks/after_install z zawartością:

echo "Ścieżka interpretera $rvm_ruby_home"

Skrypt ten zostanie wywołany po każdym zainstalowaniu nowej wersji Rubiego. Korzysta on ze zmiennej środowiskowej $rvm_ruby_home (pełna lista zmiennych dla RVM wraz z opisami).

7. Uruchamianie programów (i testów) na wielu wersjach Rubiego

Jeśli mamy program pinkie_pie.rb, następująca komenda uruchomi go na wszystkich zainstalowanych wersjach Rubiego.

rvm ruby pinkie_pie.rb

Możliwe jest ograniczenie wykonywania do konkretnych wersji. Jeśli chcemy sprawdzić tylko 1.9.2 i Rubinusa, to piszemy:

rvm 1.9.2,rbx ruby pinkie_pie.rb

Jest to szczególne przydatne przy odpalaniu testów (np. do sprawdzania pod jakimi wersjami działa Twój gem):

rvm rake test

Możliwe jest ustalenie formatu raportu przy pomocy opcji --json oraz --yaml. Oczywiście działa to też z Rspeckiem.

8. Przydatne komendy

Można użyć konkrentego gemsetu i przy okazji stworzyć plik .rvmrc:

rvm use 1.9.2@rails3 --rvmrc

Krok dalej. Stworzenie gemsetu wraz z plikiem .rvmrc:

rvm --create --rvmrc 1.9.2@projekt_x

Instalacja gemów dla różnych wersji Rubiego naraz:

rvm 1.8.7,1.9.2 gem install rails

Aby automatycznie tworzyć gemset przy pierwszym użyciu można w pliku ~/.rvmrc ustawić następującą flagę:

rvm_gemset_create_on_use_flag=1

9. Graficzna nakładka

Ostatnio powstało GUI do RVM, dostępne tylko na OS X. Co prawda jest bardzo ładne, ale skoro przebrneliście przez ten artykuł, to raczej nie powinno być wam potrzebne.

10. Alternatywa

Jeśli z jakichś względów RVM Ci nie odpowiada, zawsze możesz użyć lżejszego narzędzia o nazwie Rbenv. Osobiście nie widzę powodu by z niego korzystać.

Macie do dodania inne ciekawe rady odnośnie RVM?



Komentarze

  1. Łukasz 28.09.2011

    Comment Arrow

    Jeden mały problem 🙂 zamiast

    rvm use gemset global

    powinno być

    rvm gemset use global

    Poza tym, jak zwykle przydatnie – nie znalem –rvmrc


  2. Maciej Gajewski 28.09.2011

    Comment Arrow

    Jeszcze jedno. RVM to nie jest Ruby Virtual Machine tylko Ruby Version Manager 😉




O autorze

Aleksander Dąbrowski

Od 2008 zawodowo programuje w Ruby i Railsach. Jest maniakiem prostych i eleganckich rozwiązań, nie boi się usuwania brzydkiego kodu. Uwielbia dzielić się wiedzą, a w wolnych chwilach naprawia samochody.