Когда Необходим Rvm, А Когда Достаточно Rbenv?

В этой статье я не буду вдаваться в подробности работы RVM и rbenv. В Интернете достаточно информации по этим вещам.

Здесь я хочу попытаться ответить на вопрос: когда следует использовать rbenv, а когда нет?



Цель

Для этого давайте сначала разберемся, зачем был создан RVM, и почему rbenv. Для этого достаточно посмотреть на возможности обеих систем.



функции rbenv
  • Установка разных версий Ruby
  • Удаление их по отдельности
  • Изменение версии Ruby в системе
  • Изменение версии Ruby для конкретного проекта
  • Установка гемов для текущей версии Ruby в систему (точнее, в путь установки текущей версии Ruby)
Это все возможности, к сожалению или к счастью.

От себя хочу добавить, что больше ничего и не нужно.



Возможности РВМ
Так как возможностей очень много (все можно посмотреть на официальном сайте), то здесь я приведу основные.

  • Установка разных версий Ruby
  • Удаление их по отдельности
  • Установка драгоценных камней
  • Удаление драгоценных камней
  • Вызов между версиями Ruby в системе
  • Вызов между драгоценными камнями в системе
  • Создание конфигурации Ruby или драгоценного набора для конкретного проекта.

Давайте остановимся на этом.

Список будет в 2 раза больше за счет того, что RVM поддерживает не только манипуляции с рубином, но и с гемсетами.



Зачем нужны драгоценные камни?

Когда упаковщик не было в мире, все гемы, необходимые для проекта, были установлены в систему и смешаны с гемами, используемыми другим проектом.

В итоге у нас получилась путаница с различными гемами разных версий, проект использовал не ту версию гема при запуске и вылетал, или еще хуже - запустился и работал не так как хотелось бы, или гем вообще не был включен в проект по неизвестным причинам.

Альтернативным решением было, конечно, заморозить их в продавец/ , но такое решение не позволяло обновлять гемы (это приходилось делать вручную), и проект весил в несколько раз больше.

С появлением упаковщик появилась возможность устанавливать необходимые для проекта гемы куда угодно (для этого нужно перенести на установка пакета переменная --путь ), и эти гемы никак не повлияют на работу другого проекта.

В результате мы получаем то, что за нас делает RVM — рабочая лошадка управления гемсетами, но RVM нам для этого не нужен! Это ответ на главный вопрос данного поста.

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

Если вы привыкли упаковщик во всех проектах использование RVM становится бессмысленным.



Как использовать rbenv

Допустим, у нас есть два проекта А (rails 3, Ruby 1.9.1) и Б (rails 2, Ruby 1.8.7), в системе установлен rbenv с этими версиями Ruby. Мои действия:
  • Вступая на путь проекта Б
  • Выполнять рбенв локальный 1.8.7 .

    Это создаст файл версии .

    rbenv, и теперь, когда он находится в этом каталоге, версия Ruby будет установлена из этого файла.

  • установка пакета --path=vendor/bundle .

    Это заморозит гемы, описанные в Gemfile в путь .

    /поставщик/комплект

  • То же самое делаю с проектом А, устанавливая версию 1.9.1.
Это все.

В результате у нас есть 2 проекта с разными, непересекающимися наборами гемов для разных версий рубина.

Если мы зайдем в проект А, мы автоматически установим в оболочку Ruby 1.9.1. При запуске сервера появляется Ruby 1.9.1 и набор гемов от поставщик/пакет .

Огромный плюс в том, что мы можем без проблем проанализировать исходный код гемов и изменить их, если это, конечно, необходимо.

Я считаю преимуществом то, что исходный код всех гемов будет в проекте, а не где-то там, это очевидно и не требует подробного объяснения и разбора полетов.



Зачем тогда РВМ?

Рационально использовать RVM можно только в одном случае: если в проектах не используются упаковщик .

Теги: #ruby #rvm #rbenv #bundler #ruby

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.