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?