Как обновлять пакеты ruby при использовании RVM

28 July 2012 #ruby#rvm#tips

В ruby можно устанавливать гемы (gems) в самых различных версиях. и все они будут сосуществовать рядом друг с другом. После апдейта можно использовать команду gem cleanup для того, чтобы удалить старые версии пакетов.

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

Как известно, для управления наборами пакетов в RVM используется команда rvm gemset. Таких наборов можно создавать сколько угодно и обычно под каждую задачу создается свой определенный gemset. Между собой наборы не пересекаются и, соответственно, в разных задачах можно использовать абсолютно любые версии пакетов.

Установка гемов в gemset обычно производиться с помощью команды bundle. Для этого в директории проекта создается файл Gemfile, в котором прописываются все необходимые пакеты с указанием версий (если это необходимо) и затем дается команда:

$ bundle install

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

$ rvm gemset empty jekyll
$ bundle install

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

Не самый лучший вариант, но работает.

Проблема с XCode в Mountain Lion

После обновления Mac OS до Mountain Lion и попытке установить пакеты в свой проект, столкнулся с проблемой при компиляции дополнений, выводилась следующая ошибка:

***
make: /usr/bin/gcc-4.2: No such file or directory
***

При этом XCode и его утилиты командной строки были предварительно установлены. Что странно, в интернете не нашел упоминания о данной проблеме, поэтому решил поступить проще. Нашел, где располагается gcc в системе и создал на него символическую ссылку:

$ sudo ln -s /usr/bin/llvm-gcc /usr/bin/gcc-4.2

После чего установка пакетов прошла уже без проблем. Остается теперь разобраться, из-за чего возникала данная проблема и как ее следует правильно решать. А в качестве временного решения сойдет и этот.