Как я могу написать ловушку, которая вызывается при установке RubyGem? - PullRequest
4 голосов
/ 21 октября 2008

Я хотел бы написать фрагмент Ruby, который запускается при первой установке моего Gem через [sudo ]gem install mygem. Можно ли это сделать?

Ответы [ 3 ]

2 голосов
/ 23 октября 2008

Не похоже, что это действительно поддерживается. Я нашел атрибут "post_install_message", который вы можете установить в спецификации gem, но он не будет выполнять код.

Вы можете сделать это, упаковав код при установке в качестве расширения в вашем геме (как если бы оно было нативным расширением) и предоставив Rakefile для «сборки» расширения (т.е. вызова вашего кода).

1 голос
/ 17 января 2015

У меня была такая же проблема. Лучшее решение, которое я нашел, заключается в следующем:

# your_gem.gemspec
Gem::Specification.new do |spec|
  # ...
  spec.extensions = ['Rakefile']
end

-

# Rakefile
task :prepare do
  # Execute your post-installation code here
end

task default: :prepare
0 голосов
/ 22 октября 2008

Вы можете попытаться сделать это с помощью вызова команд ОС. Я приведу пример из irb, но вы можете сделать то же самое в своих скриптах.

irb(main):001:0> system 'gem list | grep rails'
rails (2.1.1, 2.1.0)
=> true
irb(main):002:0> system 'gem list | grep railssssss'
=> false

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

...