Статьи

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

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


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

RVM расшифровывается как R uby en V Ironment M anager . Вот идея. Как разработчик Ruby, вы можете столкнуться с ситуациями, когда вам придется использовать несколько версий Ruby. Например, вы начали с Ruby 1.8.6, но теперь вы хотите поэкспериментировать с 1.9.2. Или вы обычно работаете с веткой 1.9, но хотите внести свой вклад в проект с открытым исходным кодом, который все еще находится в ветке 1.8.

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

Сегодня действуют две оговорки:

  1. Вы должны быть хорошо знакомы с командной строкой.

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


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

1
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

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

Затем, чтобы запустить этот скрипт автоматически, мы используем двойной знак «меньше», чтобы передать скрипт команде слева от оператора. В нашем случае это bash . Вы можете знать bash как оболочку или терминал, который вы, вероятно, используете прямо сейчас. Это запускает скрипт в оболочке bash (которая выполняется внутри оболочки bash в вашем терминале!).

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

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

1
[[ -s «$HOME/.rvm/scripts/rvm» ]] && source «$HOME/.rvm/scripts/rvm» # This loads RVM into a shell session.

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

Но помните, RVM — это быстрорастущая библиотека, и, возможно, метод установки изменится. Для самых современных способов установить RVM, проверьте документацию .

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


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

Рубины являются основной (хотя и не исключительной) целью RVM; помните, что означает RVM? Ruby en V Ironment M anager. Итак, давайте установим несколько рубинов!

Если вы уже давно используете Ruby, вы будете знать, что на выбор есть несколько различных реализаций Ruby. Вы можете увидеть, какие из них доступны с RVM, с помощью этой команды:

1
rvm list known

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

Итак, давайте выберем версию и установим ее. Тем не менее, есть кое-что, что мы должны сделать в первую очередь. Вполне возможно, что существуют некоторые зависимости, которые требуются вашей платформе, прежде чем вы сможете установить рубин по вашему выбору. Невероятно, но и здесь у вас есть поддержка RVM: запустите команду rvm notes чтобы увидеть, какие зависимости вы должны установить. В нем будут перечислены различные рубины, которые вы можете установить, и то, что вы должны установить в первую очередь для каждого из них.

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

1
rvm install ruby-1.9.2-p180

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

Выполнение этой команды займет несколько минут, но как только она будет выполнена, на вашем компьютере будет установлена ​​выбранная вами версия ruby.

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

Это довольно просто. Чтобы использовать данный Ruby, используйте эту команду:

1
2
3
rvm use <ruby string> # in abstract
 
rvm use 1.9.2-p180

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

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

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

1
2
3
4
ruby-1.8.7-p302 [ x86_64 ]
  ruby-1.8.7-p334 [ x86_64 ]
  ruby-1.9.2-p0 [ x86_64 ]
  ruby-1.9.2-p180 [ x86_64 ]

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

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

В то время как несколько Ruby — это круто, гемсеты — по крайней мере для меня — находятся там, где они есть. По сути, набор камней — это набор драгоценных камней, которые вы используете исключительно (или почти исключительно). Это здорово в двух случаях:

  1. Вы хотите использовать разные версии данного гема, возможно, с разными версиями Ruby.
  2. Вы хотите «замочить» свои драгоценные камни, чтобы в определенный момент времени были доступны только определенные драгоценные камни.

Посмотрим, как это работает.

1
rvm gemset create <gemset name>

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

Вы можете увидеть выгоду в этом: есть некоторые драгоценные камни, которые вы всегда хотите, независимо от того, что вы делаете. Действительно, есть еще один набор гемов, набор гемов по умолчанию, которого нет в списке и у которого нет имени. Если вы не используете определенный набор гемов, у вас есть гемы в наборе гемов по умолчанию (и, конечно же, глобальный набор гемов).

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

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

1
rvm gemset use <gemset name>

Как только вы используете заданный набор гемов, вы можете установить гемы с помощью gem install gem-name . Здесь есть важное примечание. Не используйте sudo при установке этого; при этом полностью игнорируется тот факт, что RVM запускает шоу здесь и устанавливает его на всю систему вне среды RVM. Итак, просто сделайте gem install gem-name .

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

Эти файлы драгоценных камней также являются отличным способом хранения списка драгоценных камней. Вы можете экспортировать gemset с помощью rvm gemset export ; это сохранит список драгоценных камней в текущем наборе драгоценных камней как default.gems в любой папке, в которой вы находитесь. Если вы хотите дать этому файлу определенное имя, просто добавьте его в конце этой команды. Затем вы можете импортировать этот список драгоценных камней в другой Ruby или даже на другой компьютер (подумайте о том, rvm gemset import gem-list-file-name его в систему контроля rvm gemset import gem-list-file-name ) с помощью команды rvm gemset import gem-list-file-name .

Еще одна вещь о gemsets: вы можете использовать их в rvm use . Сделай это:

1
rvm use <ruby string>@<gemset name>

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

Глобальные и пользовательские файлы .rvmrc в основном являются опциями компиляции для установки новых Ruby. Тем не менее, файлы проекта .rvmrc являются интересными.

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

1
rvm —rvmrc —create 1.8.6-p334

Это создаст сильно закомментированный файл .rmvrc , который без проблем изменит вашу среду Ruby, когда вы перейдете в этот каталог. Обязательно прочитайте комментарии, чтобы увидеть, что именно делается для переключения сред и что вы можете делать с файлами .rmvrc .

Это становится еще лучше с gemsets. Я использую Ruby 1.9.2 для всех своих проектов, но мне нравится иметь разные гемсеты для каждого проекта. Итак, если у меня есть проект, который называется superproj , я могу сделать это:

1
rvm —rvmrc —create 1.9.2@superproj

Просто добавьте знак после имени Ruby и добавьте его к своему имени набора гемов. Как и ожидалось, это позволит легко загрузить нужные драгоценные камни для этого проекта. Если этот набор еще не создан, RVM сделает это и для вас.

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

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

1
PS1=»\$(~/.rvm/bin/rvm-prompt) $PS1″

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


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

Но есть больше, чтобы узнать о RVM, чем я показал здесь. Для получения дополнительной информации обязательно ознакомьтесь с отличной документацией . И дайте мне знать в комментариях, если у вас есть какие-либо вопросы.