2015-11-11
Вот ситуация: RubyGems поддерживает перехваты до и после установки / удаления в качестве расширений команды gem
. Другими словами, эти хуки применяются ко всем установленным драгоценным камням и не предназначены для настройки в конкретном драгоценном камне. Они вызываются в файле с именем operating_system.rb
, который обычно находится в /usr/lib64/ruby/2.2.0/rubygems
; или в любом месте и версии Ruby установлен. Крючки используются таким образом:
# /usr/lib/ruby/x.y.z./rubygems/operating_system.rb
Gem.pre_install do | installer |
# do whatever
end
Gem.pre_uninstall do | installer |
# do whatever
end
Gem.post_install do | installer |
# do whatever
end
. . .
Если углубиться в документацию по API, то кажется, что для использования внешних действий, специфичных для драгоценного камня, доступны плагины. См. http://guides.rubygems.org/plugins/#executablehooks и https://github.com/rvm/executable-hooks в качестве примера. Однако, похоже, что все они влияют на приложение RubyGem в целом, а не на один гем. И такие плагины должны быть установлены как самоцветы, чтобы иметь эффект.
Мне кажется, что специфичные для gem хуки до и после установки являются проблемой безопасности. Кто-то, устанавливающий системный уровень Gem, по определению имеет привилегию root и позволяет RubyGem выполнять произвольные действия, помимо простой установки библиотеки, имеет очевидные последствия для безопасности.
Я проверяю это у ребят из Ruby (2015-11-10). Возможно, эти хуки предназначены только для людей, устанавливающих сам RubyGem на разных платформах.
RubyGems сейчас (2015) поддерживает pre_install()
и post_install()
хуки как методы, которые принимают & block в качестве аргументов. Предположительно, вы можете делать все, что захотите, в любом из них, при условии, что вы не вернете false
ни из одного из них. Возвращение nil
в порядке, но возврат false
прервет установку гема.