Александр Хохлов, DontPanic
Большое количество интепретаторов (MRI 1.8.6, MRI 1.8.7, 1.9.1, 1.9.2, Ruby Enterprise Edition, JRuby) и широкое разнообразие версий gem-ов (rails-3.1.1.rc*, rails-3.1.0, rails-2.3.*): и всем этим надо управлять в пределах одной машины.
Хороший пример: Redmine Installation Guide: Requirements
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && \ . "$HOME/.rvm/scripts/rvm"
gem install rvm
rvm-install
rvm list known
rvm install 1.9.2
rvm use 1.9.2
rvm use 1.9.2 --default
rvm gemset create rails3x
rvm gemset use rails3x
rvm 1.9.2@rails3x
rvm 1.9.2,jruby,ree test.rb
rvm 1.9.2,jruby,ree rake spec
rvm 1.9.2,jruby,ree gem install unicorn
rvm 1.9.2,jruby,ree exec <command>
Богатый функционал, множество возможностей, hooks, автодополнение командной строки, работа с proxy, экспорт/импорт gemsets, интеграция с capistrano/chef, стабильная кодовая база.
Тонный bash скриптов, переопределение команды 'cd' и 'gem', необходимость загрузки в текущий shell.
cd && \ git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> \ ~/.bash_profile
#echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> \ ~/.zshrc
brew update
brew install rbenv
brew install ruby-build
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
#echo 'eval "$(rbenv init -)"' >> ~/.zshrc
Используется ruby-build
cd && \ git clone git://github.com/sstephenson/ruby-build.git
cd ruby-build && ./install.sh
rbenv install ruby-1.9.2-p290
Установит в нужную папку внутри ~/.rbenv/
rbenv global 1.9.2-p290
rbenv local 1.9.2-p290
rbenv rehash
rbenv version
rbenv versions
Имеется в виду, что используется Bundler и все зависимости управляются с его помощью.
Но есть plugin к rbenv, который позволяет использовать старые добрые gemsets.
Очень легковесный, для базовой функциональности, без вмешательства в shell, автодополнение, plugins и hooks. Подход более прозрачный, а значит легко контролируемый.
Молодой проект, и код модифицируется часто, только базовые функции, нет (пока) готовых рецептов интеграции, возможны проблемы с совместной работой с passenger.