7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Ruby

Почему стоит использовать RVM

Scroll to top
Read Time: 10 mins

Russian (Pусский) translation by Anton L (you can also view the original English article)

Как только вы подсядите на Ruby разработку, вам захочется экспериментировать с различными версиями Ruby. Сперва может показаться что это не так просто. С RVM это сделать будет абсолютно легко. В этом туториале я познакомлю вас с RVM.


0 — что такое RVM?

Без RVM довольно сложно иметь больше чем одну установленную версию Ruby на компьютере.

RVM - менеджер версий Ruby (Ruby enVironment Manager). Вот вам идея. Будучи Ruby разработчиком вы можете столкнуться с такой ситуацией, когда вам потребуется несколько версий Ruby. К примеру, вы начала с Ruby 1.8.6, после чего захотелось поэкспериментировать с 1.9.2 или чаще всего вы работаете с веткой 1.9, но вам хочется внести вклад в проект с открытым исходным кодом, который находится на ветке 1.8.

Без RVM сложно иметь больше одной версии Ruby установленной на компьютере. А вдруг вам захотелось испробовать альтернативный интерпретатор, допустим Rubinius или JRuby? Как вы можете, на время использовать одну версию, не отказываясь от своего верного MRI? Вот где нам на помощь приходит RVM. По своей сути это фреймворк, который позволяет работать с множеством версий Ruby, и вам не составит труда переключаться между ними, когда угодно.

Есть две оговорки на которые стоит обратить внимание:

  1. Вы должны достаточно уверенно пользоваться командной строкой.

  2. Вы должны использовать Unix систему. Вы либо должны использовать Mac OS или какую-либо версию Linux. Мне бы очень хотелось, чтобы RVM был доступен под Windows, но это не так. Если вы пользователь Windows попробуйте Pik; Я понимаю что он довольно похож, но никогда его не использовал.


1 — как установить RVM?

Процесс установки RVM немного неудобный. Сперва, у вас должен стоять Git. После чего вы скачиваете скрипт и запускаете его для выполнения инсталляции. Сайт RVM рекомендует делать это следующим образом:

Даже в случае если вы хорошо знакомы с командной строкой, вероятнее вы сделаете паузу и задумаетесь на данном этапе. Проще всего читать это в обратном направлении: мы используем curl для того чтобы скачать скрипт, на который указывает ссылка; флаг -s даёт понять curl, что вы хотите скачать скрипт бесшумно (silently, без лишнего вывода в командную строку). Это скрипт, который установит RVM.

Далее для запуска скрипта в автоматическом режиме мы используем двойной знак меньше, чтобы передать скрипт команде слева от оператора. В нашем случае это bash. Вам скорее всего известно что bash - интерпретатор командной строки, или терминал, который запущен у вас в текущий момент. Это запускает скрипт с помощью bash (который работает в интерпретаторе командной строки, в вашем терминале).

Команда выше скачает и запустит скрипт, который установит RVM.

Однако это ещё не всё. Чтобы убедиться, что RVM запускается как надо, вы должны добавить следующий кусочек кода в ваш файл ~/.bash_profile, или ~/.bashrc.

Как видно из комментария, "this loads RVM into shell session (это загружает скрипт в сессию интерпретатора командной строки)". В частности если вам интересно, эта команда добавляет rvm как функцию командной строки (как ту которую вы могли бы добавить в файл ~/.bash_profile), вместо бинарного кода (программу, которую вы запускаете в командной строк, допустим ls или ruby).

Но помните, RVM часто обновляемая библиотека и есть вероятность что метод установки изменится. Чтобы узнать самый актуальный способ установки проверьте документацию.

Теперь когда у нас установлен RVM, давайте начнём им пользоваться!


2 — как использовать RVM?

Две особенности, которые предоставляет нам RVM - Rubies и Gemsets. Давайте взглянем на каждый из них по порядку, после чего изучим другие кастомизации.

Rubies

Rubies - основной (хотя и не эксклюзивный) функционал RVM; помните что означает RVM? Менеджер версий Ruby - Ruby enVironment Manager. Так что давайте установим ruby!

Если вы использовали Ruby на протяжении определённого времени, вам скорее всего известно, что есть несколько реализаций Ruby, из которых можно выбрать. Можно узнать какие из них доступны благодаря RVM, используя команду:

Кстати взгляните на синтаксис; большинство команд RVM, которые вы используете представляют из себя следующее: rvm, категория и команда для этой категории. Как и предполагается, эта команда предоставит нам список реализаций (и версий этих реализаций), который можно установить.

Так что давайте выберем версию и установим её. Однако, есть что-то, что мы должны сделать сперва. Есть вероятность, что для этого потребуются какие-либо зависимости, которые требуются платформе, перед тем как установить ruby, который был вами выбран. Что здорово, так это то что RVM поможет вам и в этом: запустите команду rvm notes, чтобы увидеть необходимые для установки зависимости. Будут перечислены различные ruby, которые можно поставить и что вам изначально стоит установить для каждого из них.

Обычно я использую Ruby 1.9.2, давайте же установим его. Для установки Ruby, используйте команду rvm install, после чего укажите реализацию и версию, которая вам нужна, которую мы могли видеть во время запуска rvm list known.

Вы можете установить сколько угодно Ruby используя лишь эту команду.

На выполнение данной команды уйдёт несколько минут, но как только всё будет готово, у вас на компьютере будет установлена желаемая версия ruby.

Вы можете установить сколько угодно версий Ruby, используя эту команду. Что же теперь, когда у нас есть больше чем одна установленная версия, как их использовать и как между ними переключаться? И что же с реализацией Ruby, которая стояла на вашем компьютере?

Всё довольно просто. Чтобы использовать необходимый Ruby, запустите следующую команду:

Если вы сделаете только это, вам придётся вводить эту команду каждый раз когда вы открываете терминал; в противном случае по умолчанию будет работать Ruby, который находился на вашем компьютере до установки RVM. Чтобы этого избежать, добавьте флаг --default. Также у вас будет простой способ переключиться обратно к версии Ruby по умолчанию, в любой момент времени; если вы переключитесь к другому Ruby, просто введите rvm default для переключению к версии по умолчанию.

Чтобы убедиться, что вы используете правильную версию, введите ruby -v; тем самым вы увидете версию Ruby, которая только что была выбрана.

Если вы используете несколько Ruby, вам вероятно захочется узнать доступные вам версии; для этого у нас есть команда rvm list. Вот мой текущих набор:

Как вы можете догадаться, знак => напротив последнего означает версию, которую я использую в настоящий момент.

Если вы хотите удалить Ruby, это также просто сделать. Воспользуйтесь rvm remove <ruby string>, чтобы избавиться от всего, что имеет отношение к данному Ruby. Если вам кажется, что у вас появится желание установить данный Ruby, снова, в будущем, используйте rvm uninstall; это оставит исходники и прочее и не удалит их.

Gemsets

Ruby это отлично, однако gemsets ещё лучше, по крайней мере для меня. Проще говоря gemset -  набор gem'ов, которые вы в основном используете. Gemsets - это здорово по двум причинам:

  1. Вы захотите использовать разные версии определённых gem'ов, вероятнее всего с разными версиями Ruby.
  2. Вам захочется так сказать добавить эти gem'ы в песочницу, чтобы лишь определённые gem'ы были доступны в определённое время.

Давайте посмотрим как это работает.

Конечно вы можете называть gemset как захотите. Чтобы увидеть все gemset'ы, используйте rvm gemset list. Если вы сделаете это сейчас, вы увидете два gemset'а (предположим вы запустили команду выше). Вы увидите <gemset name> (имя gem'а, как вы его назовёте) глобально (global). Глобальный gemset - специальный; как вы возможно догадались, gem'ы в глобальном gemset'е доступны в не зависимости от того, какой gemset вы используете.

Вы можете понять преимущества этого подхода: есть gem'ы, которые нужны постоянно, не важно что вы делаете. На самом деле, есть и другой gemset, gemset по умолчанию, который не перечисляется в списке, и у которого нет названия.  Если вы не используете определённый gemset, все gem'ы находятся в доступном default gemset (и конечно же, в global gemset).

Вы можете узнать набор gemset'ов с помощью команды rvm gemset list; как и прежде знак => означает используемый в данный момент gemset. Если нет выделенного gemset'а, следовательно вы используете default gemset.

Ничего не может быть проще переключения gemset'ов:

Как только вы создадите gemset, можно устанавливать gem'ы c помощью gem install название gem. Есть одно важное замечание. Не нужно использовать sudo во время установки; сделав это RVM будет полностью проигнорирован и gem будет установлен в систему, вне среды RVM. Так что используйте просто gem install название gem.

Как я говорил, default и global gemset'ы создаются когда вы устанавливаете новый Ruby. Если у вас есть определённые gem'ы, которые вы хотите поставить по умолчанию, когда ставится Ruby, добавьте их в соответствующий файл gem'ов. В ~/.rvm/gemsets/, вы обнаружите два файла: default.gems и global.gems. Просто перечислите gem'ы по имени, каждый на своей строке.  Эти gem'ы будут установленны в соответствующий gemset, когда поставится новый Ruby.

Файлы gem'ов также являются отличным способом сохранить список gem'ов. Можно экспортировать gemset с rvm gemset export; это сохранит список gem'ов в текущий gemset, как default.gems, не важно в какой папке вы находитесь. Если вы хотите дать файлу определённое имя, просто добавьте его в конце команды. После чего вы можете импортировать список gem'ов для другого Ruby или даже другой компьютер (думайте об этом, как об инструменте для контроля исходников), rvm gemset import gem-список-название-файла.

Ещё одна делать о gemset'ах: вы можете использовать их с командой rvm use. Сделайте следующее:

Файлы .rvmrc

Файлы .rvmrc очень удобные. Думайте о них, как о панели управления RVM. Файл .rvmrc может находиться в трёх различных местах: /etc/rvmrc устанавливает опции для всей системы; ~/.rvmrc устанавливает опции для текущего пользователя; файл .rvmrc в определённой директории, добавляет настройки для определённого проекта, в этой папке.

Глобальный .rvmrc и .rvmrc пользователя по своей сути содержат опции для установки новых Ruby. Однако, .rvmrc для определённого проект, довольно интересный.

Вот как это делать во время начала работы над новым проектом, вы создаёте .rvmrc файл в данной директории. Предположим у вас есть Rails приложение, которому нужна версия Ruby 1.8.6; по умолчанию стоит 1.9.2 и у вас нет желания каждый раз переключать Ruby, во время работы над данным проектом. Так что введите эту команду:

Будет создан .rvmrc полный комментариев, который не заметно изменит Ruby среду, когда вы переходите в данную директорию. Прочитайте комментарии, чтобы понять что на самом деле было использовано для переключения среды и что можно сделать в файле .rvmrc.

С gemset'ами данная функция покажется ещё лучше. Я использую Ruby 1.9.2 для всех проектов, но мне нравится иметь отдельный gemset для каждого проекта. Тем самым, допустим, у меня есть проект под называнием superroj, я могу сделать следующе:

Добавьте знак собаки после названия Ruby, после чего название gemset'а. Как и ожидалось, будут загружены необходимые проекту gem'ы. Если gemset ещё не был создан, RVM сделает это за вас.

Кастомизация приглашения командной строки

Возможно вам хочется знать, какой gemset и ruby вы используете в настоящий момент. Есть два способа: сперва, вы можете использовать команду rvm info. Это покажет вам какой gemset и ruby используется (также как и другую информацию).

В случае если вас интересует что-то более постоянное, вы можете добавить имя рядом с приглашением командной строки. Для этого добавьте строку в ~/.bash_profile. Пример из документации RVM:

Это запускает скрипт ~/.rvm/bin/rvm-prompt и добавлет вывод к приглашению командной строки (после чего, добавляется оставшаяся часть приглашения командной строки). К началу приглашения командной строки будет добавлено название ruby и gemset. Даже лучше, если вам известно как кастомизировать приглашение командной строки, изучите документацию, тем самым вы узнаете больше способов кастомизировать вывод.


Заключение: повеселитесь с этим!

Надеюсь я продемонстрировал, что нет причин не использовать RVM, в случае если вы работаете на Unix системе. Лично я не использую больше одного интерпретатора/версии Ruby, но мне кажется что gemset'ы и специфичный для проекта файл .rvmrc очень полезны.

Есть много чего ещё, что можно узнать об RVM, то что я не освятил. Для дополнительной информации обратите внимание на отличную документацию. И дайте мне знать в комментариях, если у вас возникнут вопросы.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.