如何编写在安装RubyGem时调用的钩子?
我想编写一个Ruby代码段,当我的Gem第一次通过如何编写在安装RubyGem时调用的钩子?,ruby,gem,Ruby,Gem,我想编写一个Ruby代码段,当我的Gem第一次通过[sudo]Gem install mygem安装时运行它。可以这样做吗?您可以尝试通过调用操作系统命令来实现这一点。我将引用irb中的eample,但您也可以在脚本中这样做 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
[sudo]Gem install mygem
安装时运行它。可以这样做吗?您可以尝试通过调用操作系统命令来实现这一点。我将引用irb中的eample,但您也可以在脚本中这样做
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
您可以使用此命令的结果作为代码段执行的条件。它看起来不受支持。我发现了一个“post_install_message”属性,您应该可以在gem规范中设置它,但它不会执行代码
您可以将安装时的代码打包为gem中的扩展(就像它是本机扩展一样),并提供一个Rakefile来“构建”扩展(即调用您的代码)。我也遇到了同样的问题。我找到的最佳解决方案如下:
# your_gem.gemspec
Gem::Specification.new do |spec|
# ...
spec.extensions = ['Rakefile']
end
-
你把你的耙子放在哪里了?是否还有其他文件,例如extconf.rb?您可以将Rakefile放入与gempec相同的目录中。不需要extconf.rb。我尝试使用post_install_消息,但它实际上不会运行任何代码。我创建了一个方法来执行我的任务并返回一个字符串以满足gemspec,但它不起作用。
# Rakefile
task :prepare do
# Execute your post-installation code here
end
task default: :prepare