Warte uwagi: RVM
W cieniu wydania Ruby'ego 1.9.2 czy Rails 3.0 bez większego echa przemknęła wersja 1.0 projektu, który w krótkim czasie wkradł się do arsenału wielu developerów i jest jednym z niezastąpionych narzędzi w pracy z Rubym. RVM, czyli Ruby Version Manager służy do łatwej instalacji, zarządzania i wydajnej pracy z różnymi wersjami interpretera Ruby'ego. Jeśli jeszcze nie korzystasz, myślę, że po tym krótkim tekście zaczniesz.
Po co mi to?
W większości porządnych systemów operacyjnych Ruby jest instalowany domyślnie lub dostępny na wyciągnięcie ręki (czyt. na wywołanie apt-get
, yum
czy innego port
). Trzeba jednak pogodzić się z - jedyną słuszną - wersją dostępną w pakietach systemowych lub podjąć walkę i konfigurować, kompilować i instalować żądaną wersję ręcznie. Tu nie koniec schodów, gdyż któregoś radosnego dnia przychodzi czas na instalację 1.9 i mamy kłopot. Siedem rozgrzebanych projektów wykorzystujących 1.8 pewnie nie będzie zadowolonych kiedy nagle ?o
zwróci "o"
zamiast 111
. Niektóre dystrybucje przygotowały się na to i dystrybuują pliki binarne z suffixami 18
lub 19
. Mamy wtedy już 2 opcje. Ale co z JRuby? A co z gemami?
I tak narodził się RVM.
Dla niecierpliwych:
$ rvm install 1.9.2 $ rvm use 1.9.2 $ ruby -v ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.3.0] $ rvm use system $ ruby -v ruby 1.8.7 (2010-06-23 patchlevel 299) [i686-darwin10]
Jak zacząć?
Sugerowaną metodą instalacji jest wykorzystanie skryptu dostarczonego przez autora. Jedna komenda załatwi 95% instalacji - sklonuje repozytorium z GitHuba, przygotuje katalog w $HOME
i wgra wszystkie skrypty RVMa:
$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
Po zakończeniu skryptu należy tylko dodać jedną linię na końcu .profile
(lub .bash_profile
etc):
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
Pamiętaj, aby dodać tę linię po wszystkich zmianach w $PATH
. Inaczej mogą one nadpisać ścieżki ustawianie przez RVM (tak dzieje się np. z MacPortsami, które zawsze doklejają swoje ustawienia ścieżek na końcu .bash_profile
).
Aby zobaczyć listę dostępnych środowisk wywołaj:
$ rvm list known
Lista aktualnie zawiera MRI w wersjach 1.8.6, 1.8.7, 1.9.1 i 1.9.2 (każda w kilku odmianach), kilka wersji JRuby, Rubiniusa, REE, MagLev i MacRuby. Instalujemy wywołując jedynie:
$ rvm install 1.9.2
Jeśli życzysz sobie konkretną wersję, wpisz np:
$ rvm install 1.9.2-head
RVM ściągnie, skonfiguruje i skompiluje wybrany wariant. Cała instalacja odbywa się w katalogu domowym bieżącego usera, pamiętaj więc aby nie używać sudo
! Wszystkie wersje Ruby'ego będą sobie grzecznie mieszkały w $HOME/.rvm/rubies
, zaś gemy dla każdej z nich w $HOME/.rvm/gems
.
Po zakończeniu instalacji przełącz się do wybranej używając:
$ rvm use 1.9.2
Sprawdźmy czy zadziałało
$ which ruby /Users/Czak/.rvm/rubies/ruby-1.9.2-p0/bin/ruby $ ruby -v ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.3.0]
Co dalej?
W każdej chwili możemy przywrócić stan przed-RVM, czyli wrócić do wykorzystania systemowego interpretera:
$ rvm use system
RVM nie narzuca wykorzystania żadnej z zainstalowanych wersji. Domyślnie każda sesja shella wykorzystuje systemowy interpreter, a dopiero po użyciu rvm
use jest on przełączany na jedną z zainstalowanych wersji. Aby wymusić domyślną wersję możesz jednak wywołać:
$ rvm --default 1.9.2
Komenda rvm
daje potężną możliwość pracy na wielu interpreterach na raz. Modelowym przykładem jest uruchomienie skryptu na wszystkich - lub niektórych - zainstalowanych wersjach Ruby'ego:
$ rvm list rvm rubies => ruby-1.8.7-p302 [ x86_64 ] ruby-1.9.2-p0 [ x86_64 ] $ echo "puts RUBY_VERSION" > version.rb $ rvm version.rb 1.8.7 1.9.2
Analogicznie można pracować z gemami, instalując wymagane na kilku wersjach jednocześnie:
$ rvm 1.8.7,1.9.2 gem install rails --no-ri --no-rdoc
Bardzo przydatną funkcją są gemsety, czyli zestawy gemów, między którymi można wygodnie przełączać się i w ten sposób testować np. współpracę naszej aplikacji z nową wersją Rails. Chcąc np. uaktualnić aplikację z 2.3.5 do 2.3.9 możemy utworzyć niezależny zestaw gemów nazwany np. rails239
i w trakcie migracji przełączać się między nim a domyślnym:
$ rvm 1.8.7 $ rails --version Rails 2.3.5 $ rvm gemset create rails239 'rails239' gemset created (/Users/Czak/.rvm/gems/ruby-1.8.7-p302@rails239). $ rvm 1.8.7@rails239 $ gem install rails -v 2.3.9 $ rails --version Rails 2.3.9
Co (jeszcze) dalej?
Powyższe wprowadzenie bynajmniej nie wyczerpuje możliwości RVM. Zachęcam do czytania świetnej dokumentacji dostępnej na stronie domowej projektu. W razie pytań możecie też śmiało walić na nasz rubysferowy blip lub stronę Rubysfery na Facebooku.