rbenv и ruby-build: лёгкая альтернатива RVM

    RVM велик и могуч, здесь тяжело поспорить. Но тому, кто занимается локальной разработкой, возможно хочется иметь что-то менее монструозное. Такой вариант есть, в базовом варианте это набор из двух утилит, а имено rbenv и ruby-build.


    Итак, попробуем установить это хозяйство. Исхожу из того, что у вас установлена ОС, отличная от Windows.

    Linux

    Устанавливаем rbenv (предполагаются git, bash):
    $ cd
    $ git clone git://github.com/sstephenson/rbenv.git .rbenv
    $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
    $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile


    rbenv предоставляет возможности для переключения версий Ruby, но никак не связан с их установкой, для этого предназначен ruby-build.

    ruby-build по умолчанию хочет поставиться в /usr/local, но мы не будем ничего загрязнять, а поставим в домашнюю папку:
    export PREFIX="~/.ruby-build"; ./install.sh
    $ echo 'export PATH="$HOME/.ruby-build/bin:$PATH"' >> ~/.bash_profile

    OSX

    Тут всё проще некуда:
    $ brew update
    $ brew install rbenv
    $ brew install ruby-build

    Далее

    Ну, теперь можно запускать:
    rbenv install 1.9.3-p0
    Итак, теперь у нас в папке ~/.rbenv/versions лежит новенькая версия Ruby.
    $rbenv versions
    1.9.3-p0

    Сделаем её активной:
    $rbenv global 1.9.3-p0
    $rbenv versions
    * 1.9.3-p0 (set by RBENV_VERSION environment variable)
    $ ruby -v
    ruby 1.9.3p0 (2011-10-30 revision 33570) [i686-linux]


    Автор настоятельно рекоммендует использовать Bundler, но для любителей йоги существует плагин rbenv-gemset.

    PS. Да, после установки любых gem'ов, которые устанавливают бинарные файлы, необходимо запустить:
    rbenv rehash

    Удачного использования!
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 18
    • 0
      Один нюанс про который забыто в статье. После установки джемов которые ставят бинари (или шелл скрипты) в bin для ruby надо после дёргать rbenv rehash. Иначе, после gem install rails команда rails не доступна. Если использовать всегда bundler то это можно и не делать, Bundler сам всё сделает.
      • 0
        Когда выступаю в роли админа, ужасно бесит эта особенность gem'ов — ставятся в обход системного пакетного не только в свой /usr/lib/ruby, но и в bin.
        • 0
          Наверное, не стоит запускать лишнего под su.
          • –2
            А вы предлагаете под каждого юзера ставить отдельный набор гемов?
            • 0
              Пока не слишком понимаю, зачем вообще многим юзерам Ruby. Или эти юзеры так друг другу доверяют, что спокойно запускают бинарники друг друга? Может, их просто внести в общую группу, и сделать .rbenv/versions общим через символические ссылки?
              • 0
                А что тут ужасного?
        • +1
          а как тут дела обстоят с .rvmrc?
          • 0
            Да, это отдельная и довольно интересная фича. В rbenv используются три уровня, global (системный, общий), local (директория) и shell (текущая сессия), для каждого из которых можно установить в качестве используемой свою версию Ruby, причём приоритет у shell выше, чем у остальных, а у local выше, чем у global.
            • 0
              Видимо вопрос скорее не в этом. А в том что «если ли в rbenv аналог .rvmrc». Есть. Создаём в проекте файл .rbenv-version с содержимым «1.9.3-preview1» и при заходе в проект rbenv сменит руби на нужный.
              • 0
                Ну, в принципе rbenv local ровно это самое и делает — этот файл создаёт.
          • +1
            Тоже недавно перешел с rvm на ruby-build и rbenv.
            Также важно отметить, что разным версия ruby ставится разный rubygems. C 1.8.7 ставится 1.6.2, что приятно.
            • 0
              >>Исхожу из того, что у вас установлена ОС, отличная от Windows.

              А для любителей маленького и мягкого подобные решения есть?
            • 0
              а в чем приемущество то? rvm — ставится с пол пинка, rehash не требует — «круто, но зачем»?
              • 0
                В rvm есть баг когда ты заходишь в терминале через mc в проект с .rvmrc которому rvm ещё не доверяет, терминал виснет. Наверно ожидает ввода «yes» на вопрос о доверии к нему. Совсем недавно это было «исправлено» отключением этой фичи в rvm.
                • 0
                  ну а помимо? :) есть какое то приемущество, конкретно под macos?
                  • +2
                    Я бы сказал то, что rbenv это просто переписанный правильно rvm который делает только одно своё дело. Переключает версии руби. Больше ничего он не делает. Об этом написано на https://github.com/sstephenson/rbenv. А так как это продвигают 37signals, то точно будет популярно. :)
                    • +4
                      Не делает ничего лишнего. Цитируя автора:
                      — не перегружает команды оболочки, такие как cd
                      — не имеет конфигурационного файла, так как ничем, кроме как контролем версий Ruby не занимается
                      — не устанавливает Ruby, для этого есть ruby-build, или это можно сделать вручную
                      — не управляет gemset'ами, для этого есть Bundler или, на худой конец, rbenv-gemset
                      — не требует патчей совместимости для Ruby gem'ов
                      Итого — ничего лишнего, KISS.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.