В этой статье я не буду вдаваться в подробности работы 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
-
Как Тайм-Бокс Помогает Увеличить Доход
19 Oct, 24 -
Как Началась Жизнь: Лего В Стиральной Машине
19 Oct, 24 -
Подписание Dkim В Ms Exchange
19 Oct, 24 -
Тайна Погребенного Храма
19 Oct, 24 -
Что Такое Memcached И Для Чего Он Нужен?
19 Oct, 24