В этой статье я сравню самые популярные менеджеры версий для Ruby на Mac: Chruby, Rbenv и RVM, а также Asdf, менеджер версий для нескольких языков, и Frum, совершенно новый менеджер версий, написанный на Rust. Я дам рекомендации, основанные на том, что вам, скорее всего, понадобится.
Предустановленный Ruby не для разработчиков
Люди, которые плохо знакомы с Ruby, рады узнать, что Ruby предустановлен на macOS. Они часто разочаровываются, когда более опытный разработчик говорит им: «Не используйте систему Mac Ruby». Я уже писал о причинах. Короче говоря, система Ruby предназначена для macOS, а не для вас. Для запуска служебных скриптов нормально, но для разработки системный Ruby устарел и, если не быть осторожным, установка гемов может привести к головным болям (в том числе и к нарушениям безопасности системы).
Проблема Homebrew с одним Ruby
Homebrew — это менеджер пакетов, который стал почти стандартом для добавления программного обеспечения для разработчиков в macOS. Homebrew позволяет легко установить новую версию Ruby, чтобы не полагаться на системный Ruby. Но есть две проблемы с Homebrew.
Asdf для нескольких языков
Asdf — это менеджер версий, поддерживающий несколько языков. Если вы используете Ruby для разработки
Итак, для разработчика Rails Asdf — идеальный менеджер версий. Он также сослужит вам хорошую службу, если вы разрабатываете приложения на Python, Elixir или многих других языках (см. список поддерживаемых языков). Есть ли недостаток в использовании Asdf? Только два. Он использует прокладки для перехвата общих команд, что может затруднить устранение неполадок. Кроме того, это может быть немного медленным для некоторых операций. Если вы разрабатываете на нескольких языках, я рекомендую вам попробовать Asdf, чтобы посмотреть, понравится ли он вам. Переключитесь на Frum, менеджер версий только для Ruby, написанный на Rust, если вы обнаружите, что Asdf замедляет работу.
Менеджеры версий только для Ruby
Если вы собираетесь разрабатывать приложения только с использованием Ruby, выберите один из четырех менеджеров версий только для Ruby: Chruby, Frum, Rbenv и RVM. Различия между ними заключаются в скорости, сложности и том, как каждый из них переключает версии Ruby. Давайте сначала посмотрим на самый старый: RVM.
РВМ
RVM был первым популярным менеджером версий для Ruby. Он до сих пор поддерживается и широко используется. RVM изменяет системную cdкоманду для установки переменных среды при смене каталогов. Чтобы переопределить cdкоманду, сценарий установки RVM изменяет файл конфигурации оболочки (~/.zshrcфайл на более новых компьютерах Mac).
RVM правильно отображает переменные среды, показывая версию и местоположение Ruby и gem, что может помочь в диагностике проблем. Однако RVM включает в себя дополнительные функции, такие как наборы драгоценных камней. Наборы драгоценных камней больше не нужны, так как Bundler был добавлен в ядро Ruby для управления зависимостями драгоценных камней. Дополнительная сложность не требуется, поэтому многие разработчики перешли на более новый менеджер версий, такой как Rbenv, Chruby или Frum.
Рбенв
Наряду с RVM, Rbenv долгое время был самым популярным менеджером версий для Ruby. Rbenv использует прокладки для перехвата общих команд Ruby. (Asdf также использует прокладки.)
После установки Rbenv с помощью Homebrew вы должны изменить свой ~/.zshrcфайл, чтобы прокладки Rbenv имели приоритет над обычными командами Ruby. Оболочка вызывает rbenv execкоманду, которая определяет, какую версию Ruby использовать перед выполнением любой команды Ruby.
Шипы имеют два недостатка.
Хруби
Chruby не так известен, как RVM или Rbenv, но его поддерживают несколько выдающихся разработчиков Ruby. В отличие от RVM, он не отменяет cdкоманду. В отличие от Rbenv или Asdf, он не перехватывает команды с помощью прокладок. Вам нужно будет изменить свой ~/.zshrcфайл, чтобы Chruby работал в вашей локальной среде оболочки. Нет необходимости изменять ваш файл $PATH, поскольку Chruby сделает это за вас на основе выбранной вами версии Ruby.
Chruby также устанавливает определенные переменные среды для Ruby. Это все, что нужно Chruby для переключения между версиями Ruby. Он отлично подходит для устранения неполадок с which. Я использовал Chruby несколько лет и не имел с ним проблем. Chruby — отличный выбор, но вы можете попробовать Frum, новейший менеджер версий Ruby.
Прекрасный
Frum написан на Rust, хорошем языке для быстрого запуска системного программного обеспечения из командной строки. Фрум новый (выпущен в начале 2021 года). В отличие от Asdf, Chruby или Rbenv, он включает в себя встроенную команду установки Ruby, поэтому для установки Ruby не требуется дополнительная программа. Установщик быстрый, и Frum не требует зависимостей (это универсальный исполняемый файл Rust, который вы можете установить с помощью Homebrew).
После установки Frum вы должны изменить свой ~/.zshrcфайл, чтобы Frum работал в вашей локальной среде оболочки. Как и другие диспетчеры версий, он проверяет наличие.
Установка менеджера версий для Ruby
Я написал полное руководство по установке Ruby на Mac. В руководстве я даю инструкции для:
установка Ruby с помощью Asdf
установка Ruby с Frum
установка Ruby с Chruby
установка Ruby с Homebrew
Если вы хотите изучить RVM или Rbenv, см.:
РВМ
Рбенв
Примечание о Докере
Если вы упомянете менеджеры версий Ruby,
Вы также можете разрабатывать локально в контейнере, но он будет работать медленнее, потребует больше памяти и усложнит конфигурацию по сравнению с диспетчером версий. Для простоты я избегаю Docker для локальной разработки, если приложение не слишком сложное.
Заключение
Вы не просто случайный пользователь Ruby, если работаете над несколькими проектами в Ruby. Убедитесь, что вы установили отличный менеджер версий в вашей локальной среде разработки.
Мне нравится Asdf, потому что я разрабатываю на Ruby и JavaScript, и Asdf дает мне один менеджер версий для обоих языков. Тем не менее, Asdf использует прокладки (например, Rbenv), поэтому иногда он работает медленнее, чем мне нравится. Меня также раздражает, что Asdf скрывает фактическую команду от устранения неполадок с помощью whichкоманды. Если эти недостатки перевешивают удобство управления несколькими языками, я рекомендую использовать Frum для переключения между версиями Ruby. Менеджеры версий должны быть простыми и не мешать вам во время работы.