Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写在安装RubyGem时调用的钩子?_Ruby_Gem - Fatal编程技术网

如何编写在安装RubyGem时调用的钩子?

如何编写在安装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

我想编写一个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'
=> 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