rbenv — это инструмент, который позволяет устанавливать и запускать несколько версий Ruby одновременно. Это простая и легкая альтернатива RVM , ориентированная исключительно на управление несколькими средами Ruby.
Каждая версия Ruby установлена в ~/.rbenv/versions
. Он использует прокладки для переключения между версиями, и они находятся в ~/.rbenv/shims
. Задача shims состоит в том, чтобы взять каталог для нужной версии Ruby и вставить его в начало вашей $PATH
а затем выполнить соответствующие двоичные файлы.
rbenv требует, чтобы вы установили каждую версию Ruby в ~/.rbenv/versions
. Он использует прокладки для переключения между версиями, и они находятся в ~/.rbenv/shims
. Задача shims состоит в том, чтобы взять каталог для нужной версии Ruby и вставить его в начало вашей $PATH
а затем выполнить соответствующие двоичные файлы.
И rbenv, и RVM отлично справляются с управлением несколькими средами Ruby. Вскоре мы рассмотрим установку rbenv и настройку нескольких версий Ruby. Перед этим давайте посмотрим на некоторые другие факторы, которые вы, возможно, захотите принять во внимание при принятии решения, использовать ли rbenv или RVM.
Почему я могу использовать RVM?
Как и rbenv, RVM позволяет устанавливать и запускать несколько сред Ruby одновременно. Но это также обеспечивает:
- встроенная поддержка для установки Rubies, например,
rvm install 1.9.2
; с помощью rbenv вы сами должны собрать Ruby - гибкая система управления драгоценными камнями под названием Named Gem Sets, которая облегчает управление драгоценными камнями в разных средах
- способность иметь идентичные, автономные среды, такие как разработка, CI, постановка и производство
- возможность одновременного тестирования нескольких версий Ruby, например, при обновлении 1.8.x до 1.9.x, JRuby и т. д.
Почему я могу выбрать rbenv?
rbenv построен на традиции UNIX: делать что-то одно и делать это хорошо. Единственное внимание уделяется управлению несколькими средами Ruby и предоставлению простых способов сделать это:
- Вы можете выбрать, какую версию Ruby использовать на глобальном уровне и уровне проекта.
- Также возможно переопределить эти настройки с помощью переменной окружения.
В отличие от RVM, rbenv не:
- переопределить любые встроенные команды оболочки
- поставляется с любым способом управления гемами (рекомендуемый способ — использовать Bundler или rbenv-gemset )
- идут с любым механизмом для установки версий Ruby
ruby-build может быть интегрирован с rbenv для упрощения установки версий Ruby. Альтернативой является загрузка и сборка каждой версии Ruby самостоятельно, что мы и сделаем в оставшейся части этой статьи.
Давайте посмотрим на установку rbenv
и настройку нескольких сред Ruby.
Установка
NB rbenv не совместим с RVM. Если у вас уже установлен RVM, вам нужно удалить все ссылки на него, прежде чем пытаться запустить rbenv. Если вы этого не сделаете, может показаться, что rbenv работает, но отклеится, когда вы попытаетесь установить гем. Согласно README rbenv это происходит потому, что RVM переопределяет команду gem
с помощью функции оболочки.
В настоящее время rbenv живет по адресу https://github.com/sstephenson/rbenv . Файл README содержит шаги, которые необходимо выполнить, чтобы установить его в нашей системе. Если вы используете OS X, вы можете выбрать более простой вариант и установить rbenv через Homebrew . Но мы посмотрим, как вы можете загрузить исходный код и собрать его самостоятельно.
Несколько быстрых заметок, прежде чем мы начнем:
- Я устанавливаю это на Ubuntu. Если вы следите за этим в OS X, вам нужно заменить все ссылки на
.bashrc
ниже на.bash_profile
- В OS X вам нужно будет установить Xcode, чтобы иметь возможность компилировать исходный код. Вы можете найти XCode на вашем установочном DVD OS X или загрузить его с http://developer.apple.com/technologies/tools/
- Поскольку мы собираем исходный код с GitHub, было бы полезно, если бы у вас был установлен git 🙂
Давайте начнем:
-
Откройте терминал и убедитесь, что вы находитесь в своем домашнем каталоге, прежде чем клонировать репозиторий GitHub в
~/.rbenv
:$ cd $ git clone git://github.com/sstephenson/rbenv.git .rbenv
-
Чтобы мы могли получить доступ к
rbenv
из командной строки, нам нужно добавить его в наш$PATH
:$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
-
Затем нам нужно добавить
rbenv init
в нашу оболочку, чтобы включить shims и автозаполнение. Если мы перезапустим нашу оболочку, мы сразу начнем работать:$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
-
Если мы перезапустим нашу оболочку, то сразу получим rbenv и автозаполнение:
$ exec $SHELL
-
Чтобы сохранить порядок, вы можете создать папку в каталоге $ HOME, в которой будет храниться исходный код каждой версии Ruby:
$ cd $ mkdir rubysrc
-
Затем загрузите последнюю версию исходного кода Ruby:
$ curl -O http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz
-
Распакуйте загрузку и
cd
в новую извлеченную папку:$ tar xzvf ruby-1.9.2-p290.tar.gz $ cd ruby-1.9.2-p290
-
Затем запустите
configure
,make
иmake install
убедившись, что вы ввели правильный номер версии в./configure --prefix
path:$ ./configure --prefix=$HOME/.rbenv/versions/1.9.2-p290 $ make $ make install
Теперь вы должны обнаружить, что вы установили Ruby 1.9.2 в папку
~/.rbenv/versions/1.9.2-p290
-
Последний шаг заключается в запуске
rbend rehash
чтобы восстановить исполняемые файлы. Рекомендуется делать это каждый раз, когда вы устанавливаете новый двоичный файл Ruby, будь то новая версия самого Ruby или гем, который поставляется с двоичным файлом.
Установка еще одной версии Ruby
Итак, у нас установлена последняя версия Ruby. Теперь давайте загрузим и установим кандидат на выпуск, а затем посмотрим, как мы можем переключаться между двумя версиями с помощью rbenv
:
-
Загрузите код кандидата на выпуск с (http://www.ruby-lang.org/):
$ cd ~/rubysrc $ curl -0 http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-rc1.tar.gz
-
Извлеките исходный код:
$ tar xzvf ruby-1.9.3-rc1.tar.gz $ cd ruby-1.9.3-rc1.tar.gz
-
Запустите
configure
иmake
как раньше. Опять же, мы должны быть осторожны с путем--prefix
. На этот раз он должен указать на RC:$ ./configure --prefix=$HOME/.rbenv/versions/1.9.3-rc1 $ make $ make install $ rbenv rehash
-
Убедитесь, что у нас действительно есть 2 версии Ruby:
$ rbenv versions 1.9.2-p290 1.9.3-rc1
Контроль версий
Теперь, когда у нас установлено 2 версии Ruby, как мы можем контролировать, какая из них используется? Легко. Мы можем использовать rbenv global
, rbenv local
или rbenv shell
-
rbenv global
устанавливает глобальную версию Ruby для использования по умолчанию. Мы собираемся установить версию 1.9.2 как глобальную, а не использовать RC по умолчанию:$ rbenv global 1.9.2-p290
Это напишет версию, которую мы выбрали как нашу глобальную, для ~/.rbenv/version
$ cat ~/.rbenv/version 1.9.2-p290 (set by /home/ianoxley/.rbenv/version)
-
rbenv local
наборыrbenv local
которые Ruby используется для каждого проекта. Например, если мы хотим использовать RC1 в нашем текущем проекте, нам нужно ввести следующее в командной строке:$ cd ~/projects/foobar $ rbenv local 1.9.3-rc1
Это записывает версию в файл .rbenv-version
в текущем каталоге (поэтому мы сначала изменили каталог в корневую папку нашего проекта):
$ cat .rbenv-version 1.9.3-rc1
-
Также можно использовать специфичную для оболочки версию Ruby, которая не зависит от глобальных или проектных настроек. Возможно, мы хотим попробовать что-нибудь, используя последнюю ночную сборку снимков Ruby?
$ cd ~/rubysrc $ curl -O http://ftp.ruby-lang.org/pub/ruby/snapshot.tar.gz $ tar xzvf snapshot-20111004 $ cd snapshot-20111004 $ ./configure --prefix=$HOME/.rbenv/versions/snapshot-20111004 $ make $ make install $ rbenv rehash
Затем мы можем установить это для использования в нашей текущей оболочке следующим образом:
$ rbenv shell snapshot-20111004
За кулисами это устанавливает RBENV_VERSION
среды RBENV_VERSION
указывающую на версию Ruby, о которой мы говорим:
$ echo $RBENV_VERSION snapshot-20111004
Может быть сброшено с помощью:
$ rbenv shell --unset
Чтобы увидеть все версии Ruby, которые вы установили и доступны для rbenv
есть команда rbenv versions
. В этом списке перечислены все версии Ruby, о rbenv
знает rbenv
и добавляется звездочка рядом с текущей активной версией в зависимости от текущего контекста, например shell, local или global. Давайте посмотрим, как меняется вывод этой команды при изменении контекста, в котором мы находимся:
$ cd $ rbenv versions * 1.9.2-p290 (set by /home/ianoxley/.rbenv/version) 1.9.3-rc1 snapshot-20111004 $ cd projects/foobar $ rbenv versions 1.9.2-p290 * 1.9.3-rc1 (set by /home/ianoxley/projects/foobar/.rbenv-version) snapshot-20111004 $ rbenv shell snapshot-20111004 $ rbenv versions 1.9.2-p290 1.9.3-rc1 * snapshot-20111004 (set by RBENV_VERSION environment variable)
Надеюсь, что все прошло хорошо? Если у вас возникли проблемы, дайте мне знать в комментариях, и я сделаю все возможное, чтобы помочь вам.