pl  |  en

RVM – wirtualne środowiska dla Ruby

UWAGA: z nowszą wersją RVMa zmienił się sposób instalacji i konfiguracji. Nowy opis znajduje się tutaj: https://www.megiteam.pl/blog/2012/05/04/rvm/

Najczęściej przewijającym się problemem przy uruchamianiu aplikacji w RoR jest niekompatybilność Railsów z określonymi wersjami Racka. Railsy 2.3.5 mają w zależnościach Racka 1.0.x, wersja 2.3.11 zależy od Racka 1.1.x, a 3.0.x od Racka 1.2.x. Problem pojawia się w momencie, gdy na jednym koncie chcesz uruchomić aplikacje napisane w różnych wersjach Railsów. Jeżeli w GEM_PATH masz kilka wersji Racka to Thin załaduje najnowszą, ale Railsy nie uruchomią się z wersją nowszą niż ta, którą mają w zależnościach. Najczęściej objawia się to komunikatem o brakującym gemie Rails, mimo że Railsy w odpowiedniej wersji masz zainstalowane.

Using rails adapter Missing the Rails 2.3.5 gem. Please gem install -v=2.3.5 rails, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.

Rozwiązaniem tego problemu jest użycie RVMa – narzędzia do tworzenia wirtualnych środowisk dla Ruby. Instalacja na naszym koncie delikatnie różni się od opisu w dokumentacji tego projektu dlatego przedstawię co krok po kroku należy zrobić, aby korzystać z dobrodziejstw RVMa u nas.

Zaloguj się na konto i wydaj polecenie

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

W ten sposób zainstalujesz RVMa. Do pliku $HOME/.environment dodaj

set +a
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
set -a

i wykonaj

source .bashrc

UWAGA: wpis nie powinien być na końcu pliku; powinien znaleźć się przed linijką

if [ -r ./.environment -a -z "$RECURSE_DOT_ENVIRONMENT" -a -z "$HOME" -o "$HOME" != "$PWD" ]

Dyrektywy set +a, set -a to jedna ze zmian koniecznych u nas. Jeżeli przy logowaniu do konta zobaczysz błąd

/bin/sh: __rvm_rm_rf: line 11: syntax error near unexpected token `('
/bin/sh: __rvm_rm_rf: line 11: ` *(/|.)@(|/Applications|/Developer|/Guides|/Information|/Library|/Network|/System|/User|/Users|/Volumes|/backups|/bdsm|/bin|/boot|/cores|/data|/dev|/etc|/home|/lib|/lib64|/mach_kernel|/media|/misc|/mnt|/net|/opt|/private|/proc|/root|/sbin|/selinux|/srv|/sys|/tmp|/usr|/var))'
/bin/sh: error importing function definition for `__rvm_rm_rf'
/bin/sh: __rvm_ruby_string: line 79: syntax error near unexpected token `('
/bin/sh: __rvm_ruby_string: line 79: ` 0.+([[:digit:]]) | 0.+([[:digit:]]).+([[:digit:]]) | 1.+([[:digit:]]).+([[:digit:]]))'
/bin/sh: error importing function definition for `__rvm_ruby_string'
/bin/sh: __rvm_parse_args: line 348: syntax error near unexpected token `('
/bin/sh: __rvm_parse_args: line 348: ` +([[:digit:]]).+([[:digit:]])*)'
/bin/sh: error importing function definition for `__rvm_parse_args'

to znaczy, że zapomniałeś je dodać.

Teraz możesz zająć się stworzeniem wirtualnego środowiska dla swojej aplikacji. Jeżeli korzystasz z Ruby 1.8.7 zainstalujesz go poleceniem

rvm install 1.8.7

Zmień wersję interpretera na zainstalowaną przed chwilą

rvm use 1.8.7

Sprawdź, czy operacja się udała

$ which ruby
/home/xyz/www/.rvm/rubies/ruby-1.8.7-p334/bin/ruby

Jeżeli wszystko ok, to stwórz gemset dla swojej aplikacji

rvm gemset create myapp
rvm gemset use myapp

Teraz czas na zainstalowanie potrzebnych gemów (nie zapomnij o Thinie) i uruchomienie aplikacji. Te kroki wykonujesz tak samo, jak bez użycia RVMa. Gemy możesz zainstalować poleceniem gem install lub przez Bundlera. W tym drugim przypadku gemy zostaną zainstalowane w katalogu Bundlera, poza GEM_PATH i Thina oraz jego zależności musisz zainstalować przez gem install (musi być w GEM_PATH). Zwróć uwagę, by wersja Racka zainstalowana z Thinem odpowiadała wersji, którą masz w Gemfile.

W katalogu aplikacji powinny znaleźć się 2 pliki:

  • .rvmrc z zawartością
     rvm 1.8.7@myapp
  • .environment z zawartością
       unset BASH_ENV
       . .rvmrc

 

Ostatnik krokiem jest dodanie aplikacji w panelu. Jeżeli wszystko będzie w porządku to pod dodaną domeną powinieneś zobaczyć swoją aplikację. Jeżeli jednak aplikacja nie uruchomi się to informacja o przyczynie problemów będzie w pliku /home/TwójLogin/logs/KatalogAplikacji/app.log

Disclaimer: powyższy wpis ma za zadanie pokazać jak w MegiTeam uruchomić aplikację korzystającą z RVMa, nie zastąpi przeczytania dokumentacji tego narzędzia.

Autor: Magda Zarych

  • PrzemekM

    RVM w MegiTeam to jedna z najlepszych wiadomości w ostatnim czasie. 🙂

    • magdazarych

      Będą lepsze 🙂 Pracujemy nad tym, żeby dodanie aplikacji w panelu wiązało się z przygotowaniem dla niej wirtualnego środowiska i uruchomieniem szkieletu aplikacji – nie trzeba będzie samemu konfigurować rvma czy virtualenv.