[devel] ruby-rake и gems

Mikhail Yakshin =?iso-8859-1?q?greycat_=CE=C1_altlinux=2Eorg?=
Вт Мар 14 14:03:01 MSK 2006


Kirill A. Shutemov wrote:
>>>Если есть такая возможность, то почему бы вообще не разобрать gems по
>>>косточкам и не разложить в правильные директории (/usr/share/ruby/vendor_ruby/1.8/ 
>>>и т.п)? Оставить в /usr/lib/ruby/gems/1.8 только то, что нужно для
>>>require_gem (я так понял, что это /usr/lib/ruby/gems/1.8/specifications/*).
>>
>>Например - потому, что gem тогда как package manager не будет его
>>видеть. Есть масса штуковин, которые работают уже в этой инфраструктуре.
>>Они ищут файлы по путям, отсчитывая их от базовый директории gem'а. Они
>>обращаются к Gem'у (а у него довольно развесистый API), с тем, чтобы
>>что-то узнавать о пакетах и потом действительно пользоваться этой
>>информацией. Автоматические тесты, что есть в gem'е - они будут искаться
>>именно в поддиректории test и т.п., причем, учитывая, что один пакет
>>зависит от другого - важно и их взаимное расположение и т.д. и т.п.
> 
> Пропатчить rubygems, чтоб он смотрел в правильные директории это очень
> сложно?

Во-первых - даже rubygems - сложно. Во-вторых, смотрят не rubygems, а
пакеты.

>>Вообще на самом деле - есть еще одно - простейшее, в общем-то, решение:
>>включить rubygems по умолчанию (ruby -rubygems). После этого начинают
>>автоматически работать require 'пакет' как синоним require_gem 'пакет'
>>(в дополнение к require 'файл') и остальные вещи, которые доступны в Gem
>>enviroment. При засовывании 'rubygems' в RUBYOPTS - всё, по сути, что
>>может не устраивать "противников" gem - это некий overhead в виде
>>микросекунд, которые требует загрузка этого самого Gem environment.
>>Может правда так сделаем и закроем вопрос?
> 
> Помимо overhead'а с загрузкой rubygems, повышается вероятность словить
> rubygems-специфичную багу.

Это да. Но - см. мое другое письмо - для любителей чистого ruby без gems
- можно просто вынести его в пакет у package manager'а - и если не
пользуешься - не ставишь сам пакет rubygems - никаких "-rubygems" не имеешь.

> Например, фактически, сильно увеличивается $: за
> счёт rubygems директорий, что не способствует безопасности.

Неправда ваша:

$ irb
irb(main):001:0> a = $:; require 'rubygems'; b = $:; p b - a
[]
=> nil

LOADPATH на самом деле не меняется. Хотя, конечно, начинают подгружаться
модули gem - но - извините - разве не этого вы хотели, когда просили,
чтобы require умел эмулировать require_gem?

-- 
WBR, Mikhail Yakshin



Подробная информация о списке рассылки Devel