Je voudrais écrire un extrait de Ruby qui est exécuté lorsque mon Gem est installé pour la première fois via [sudo ]gem install mygem
. Peut-il être fait?Comment puis-je écrire un hook qui est appelé quand un RubyGem est installé?
Répondre
Vous pouvez essayer de le faire en utilisant les commandes d'appel du système d'exploitation. Je vais citer eample d'irb mais vous pouvez faire la même chose dans vos scripts.
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
Vous pouvez utiliser le résultat de cette commande comme condition de l'exécution de votre extrait.
Il ne semble pas vraiment pris en charge. J'ai trouvé un attribut "post_install_message" que vous devriez pouvoir définir dans la spécification de gem, mais cela n'exécutera pas de code. Vous pouvez être capable de le faire en empaquetant votre code installé en tant qu'extension dans votre gemme (comme s'il s'agissait d'une extension native), et en fournissant un Rakefile pour "construire" l'extension (c'est-à-dire appeler votre code) .
J'ai eu le même problème. La meilleure solution que je trouve est la suivante:
# 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
Où avez-vous placé votre Rakefile? Y a-t-il d'autres fichiers, par exemple extconf.rb? – dinman2022
Vous pouvez placer Rakefile dans le même répertoire que votre gemspec. extconf.rb n'est pas nécessaire. – Panic
J'ai essayé d'utiliser post_install_message et ce sera vraiment pas exécuter un code. J'ai créé une méthode exécutant mes tâches et renvoyant une chaîne pour satisfaire le gemspec, mais cela n'a pas fonctionné. –