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
- 1. Quand ServiceConnection.onServiceDisconnected() est-il appelé?
- 2. Pourquoi/quand ComponentListener.componentShown() est appelé?
- 3. iPhone - quand le dealloc pour un viewcontroller est-il appelé?
- 4. ASP MVC: Quand IController Dispose() est appelé?
- 5. Quand OnValidate est-il appelé dans Linq?
- 6. Comment exécuter un hook Emacs lorsqu'un tampon est modifié?
- 7. Comment déployer un serveur RubyGem
- 8. Comment écrire un hook de sauvegarde global pour Emacs?
- 9. Comment vérifier si un module Perl est installé?
- 10. Dans Emacs, comment puis-je charger un certain fichier quand (nécessite 'x) est appelé?
- 11. Comment cacher l'invite de nom d'utilisateur/mot de passe qui apparaît quand un [WebMethod] est appelé sur une session invalide?
- 12. Comment vérifier avec C# où un programme est installé
- 13. variables de classe objective-c: quand callloc est appelé?
- 14. Quand un composant Swing est-il 'affichable'?
- 15. Comment savoir quand un élément XAML est terminé chargement
- 16. Surveiller quand un exe est lancé
- 17. Déterminer quand un service Web est disponible
- 18. Comment savoir quand Windows est inactif
- 19. WPF: Quand un WrapPanel est-il plein
- 20. Pour vérifier si Office est installé sur un serveur
- 21. Comment détecter quand un formulaire Windows est minimisé?
- 22. motionEnded est appelé plusieurs fois
- 23. vérifier un correctif logiciel pour WMEncoder est installé ou non
- 24. Appel d'une fonction qui est un attribut
- 25. Comment est OnDispose de contrôle appelé - C#
- 26. Comment savoir quand un winform est chargé par Process.Start?
- 27. Comment savoir quand un programme est ouvert avec javascript?
- 28. Comment masquer/supprimer un DIV quand il est vide
- 29. WM_MOUSEHOVER dans un hook global
- 30. Quand Default.png est-il effacé?
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é. –