Pull to refresh
0

RVM Autolibs: Автоматическое управление зависимостями и Ruby 2.0

Reading time 3 min
Views 4.6K
Original author: Michal Papis

Прошлый месяц ознаменован началом новой вехи для рубистов — релиз Ruby 2.0.0. Вместе с ним обновлённый RubyGems и новые зависимости, включая OpenSSL. Ранее RVM почти ничего не предпринимала для разрешения зависимостей, устанавливая вместо этого LibYAML, так как он был нужен для функционирования RubyGemsк. Ситуация изменилась с появлением OpenSSL, так как это является бОльшей зависимостью. Раньше для Ruby 2.0.0-rc RVM устанавливал OpenSSL. Однако компилирование OpenSSL не лёгкая задача, используя LibYAML.

Новый подход

Чтобы заставить это всё работать, RVM использует новый подход. Теперь при установке необходимых библиотек он работает в паре с системным package менеджером. Это не простая задача, так как разные системы имеют разные имена для пакетов, некоторые из них доступны по умолчанию, а некоторые недоступны вообще!

Это просто, когда это просто

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

Чувствительные значения по умолчанию

Когда autolibs впервые был добавлен, RVM думал, что пользователь хотел, чтобы всю работу сделали за него. Однако реальность показала, что некоторые пользователи думают по-другому и предпочитают устанавливать зависимости вручную. Нужен был компромисс, удовлетворяющий всех. В итоге RVM будет определять доступные библиотеки и потерпит неудачу, если они будут недоступны. У пользователей теперь есть опция переключаться между различными режимами, такими как “сделать всё за меня” и “я сделаю это сам”.

Сделай всё за меня

Пользователи, которые хотят автоматическую установку библиотек, могут использовать autolibs режим 4 aka. enable. Это прикажет RVM найти менеджер пакетов (и установить таковой, если потребуется), установить все зависимости и, наконец, использовать их для компиляции. Если менеджер пакетов недоступен (на OS X), будет установлен Homebrew. Однако пользователи также могут указать, какой менеджер будет установлен с режимами autolibs osx_port, osx_fink и smf. Менеджер smf предназначен для менее известного RailsInstaller SM фреймворка.
Для систем с установленным системным менеджером пакетов режим 4 идентичен режиму 3, который установит недостающие пакеты.

Я сделаю это сам

Для пользователей, которые не хотят, чтобы RVM всё делал за них, есть два подходящих режима. Режим 1 позволяет пользователям указать RVM брать библиотеки и просто выдавать ошибку, если они недоступны. В случаях, где даже автоматическая проверка доступности не нужна, можно выключить её, используя режим 0. Однако тут есть нюанс. Учитывая, что код становится более динамичным, нет больше списка, чтобы показать, что требуется. Это означает, что некоторые библиотеки будут выбраны в зависимости от состояния системы.

Пару уловок

Для установки RVM вместе с Ruby, Ruby on Rails и необходимыми библиотеками (aka. RailsInstaller для бедных):
 \curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enable

Для использования rvm в разработке, где sudo требует особого обращения, как в случае с capistrano:
   task :install_requirements do
      sudo “rvm --autolibs=4 requirements #{rvm_ruby_string}”
    end
    task :install_ruby do
      run “rvm --autolibs=1 install #{rvm_ruby_string}”
    end

Более подробная информация об autolibs доступна по адресу rvm.io/rvm/autolibs.

Обратная связь

Мы тестировали код autolibs достаточно давно, но благодаря вниманию более широкой публики могут быть созданы новые классы и устранены уязвимости. Если вы нашли уязвимость, мы с радостью её устраним. Посылайте все запросы об уязвимостях на наш баг трекер github.com/wayneeseguin/rvm/issues или на наш канал IRC webchat.freenode.net/?channels=rvm

Официальное начало работы над RVM 2.0.

RVM 1.19 был последним релизом с новым функционалом (Autolibs). В будущем все нововведения будут отложены до выхода RVM 2.0. Мы будем предоставлять поддержку, работать над устранением багов и обновлять версии до тех пор, пока не выйдет стабильный релиз RVM 2.0. Но для того, чтобы была возможность работать над RVM 2.0, мы приостановим выход новых фич, доступных в RVM 1.x.
Tags:
Hubs:
+19
Comments 0
Comments Leave a comment

Articles

Information

Website
www.engineyard.com
Registered
Founded
Employees
101–200 employees
Location
Ирландия