我试图弄清楚如何在 Chef 中引用 gem 二进制文件,我突然想到 gem 总是加载在一个1.9.1
目录中,而不是1.9.3
....
谁能解释一下?
如果/当我迁移到 Ruby 2 时,这会改变吗?1.9.1
如果它会改变,不想硬编码......
谢谢!
我试图弄清楚如何在 Chef 中引用 gem 二进制文件,我突然想到 gem 总是加载在一个1.9.1
目录中,而不是1.9.3
....
谁能解释一下?
如果/当我迁移到 Ruby 2 时,这会改变吗?1.9.1
如果它会改变,不想硬编码......
谢谢!
在 chef 中,您可以找到 rubygems 创建可执行文件的目录node["languages"]["ruby"]["bin_dir"]
。因此,您永远不应该在您的食谱中对这些路径进行硬编码,因为它们可能会改变。
至于您的确切问题:在 Ruby >= 1.9.1 和 < 2.0.0 中, rubygems 将 gems 安装到一个1.9.1
目录中以表示其对 1.9.1 ABI的使用。其目的是针对它编译的 gem 可以在使用此 ABI 的不同 ruby 版本之间互换使用。然而,在实践中,这变得更加困难......
Ruby 2.0.0 使用该2.0.0
目录。同样,您不应该对路径进行硬编码,而是使用节点属性(由 OHAI 使用 rubygem 自己的工具设置)。
您可以随时使用:
$ gem env gemdir
或者
$ gem env gempath
获取您的 gems 目录。