Kharkov Ruby Meetup #0

Александр Хохлов, DontPanic

RVM против rbenv

Ruby Version (and Gemset) Management

Большое количество интепретаторов (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

RVM
Ruby Version Manager

Installation

				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
            

Может установить разные интерпретаторы

  • MRI/YARV (ruby)
  • Rubinius (rbx)
  • JRuby (jruby)
  • Ruby Enterprise Edition (ree)
  • MagLev (maglev)
  • IronRuby (ironruby)
  • MacRuby (macruby)
  • GoRuby (goruby)

Продвинутые функции

				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>
            

Integration:

Prompt, IRB, Passenger, Capistrano and more

В итоге

Pros:

Богатый функционал, множество возможностей, hooks, автодополнение командной строки, работа с proxy, экспорт/импорт gemsets, интеграция с capistrano/chef, стабильная кодовая база.

В итоге

Cons:

Тонный bash скриптов, переопределение команды 'cd' и 'gem', необходимость загрузки в текущий shell.

rbenv
Simple Ruby Version Management

Installation

                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
            

Installation

Для mac-пользователей

				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/

Доступные интерпретаторы

  • MRI/YARV (ruby)
  • Rubinius (rbx)
  • JRuby (jruby)
  • Ruby Enterprise Edition (ree)
  • MagLev (maglev)
  • IronRuby (ironruby)
  • MacRuby (macruby)
  • GoRuby (goruby)

Основные функции

				rbenv global 1.9.2-p290
				rbenv local 1.9.2-p290
				rbenv rehash
				rbenv version
                rbenv versions
            

No gemsets!

Имеется в виду, что используется Bundler и все зависимости управляются с его помощью.

Но есть plugin к rbenv, который позволяет использовать старые добрые gemsets.

В итоге

Pros:

Очень легковесный, для базовой функциональности, без вмешательства в shell, автодополнение, plugins и hooks. Подход более прозрачный, а значит легко контролируемый.

В итоге

Cons:

Молодой проект, и код модифицируется часто, только базовые функции, нет (пока) готовых рецептов интеграции, возможны проблемы с совместной работой с passenger.

Thank you page
Вопросы?

Slides: rvmvsrbenv.dontpanic.com.ua
Twitter: @apoint
Email: point@dontpanic.com.ua

Шаблон презентации: Shower by @pepelsbey
Изображения взяты с сайтов: http://www.dyrathror.com/wp-content/gallery/single-pictures-for-articles/ruby.png http://beginrescueend.com/ https://github.com/sstephenson/rbenv