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
Ruby 为什么gems安装在1.9.1中。目录,即使我安装了1.9.3?_Ruby_Binary_Filesystems_Gem - Fatal编程技术网

Ruby 为什么gems安装在1.9.1中。目录,即使我安装了1.9.3?

Ruby 为什么gems安装在1.9.1中。目录,即使我安装了1.9.3?,ruby,binary,filesystems,gem,Ruby,Binary,Filesystems,Gem,我试图找出如何在Chef中引用gem二进制文件,我突然想到gem总是加载在1.9.1目录中,而不是1.9.3 有人能解释一下吗 如果/当我转到Ruby 2时,这种情况会改变吗?如果要更改,不想硬编码1.9.1 谢谢 您始终可以使用: $ gem env gemdir 或 获取gems目录。在chef中,您可以找到rubygems在节点[“语言”][“ruby”][“bin_dir”]中创建可执行文件的目录。因此,你不应该在食谱中硬编码这些路径,因为它们可能会改变 至于您的确切问题:在Ruby>

我试图找出如何在Chef中引用gem二进制文件,我突然想到gem总是加载在
1.9.1
目录中,而不是
1.9.3

有人能解释一下吗

如果/当我转到Ruby 2时,这种情况会改变吗?如果要更改,不想硬编码
1.9.1

谢谢

您始终可以使用:

$ gem env gemdir


获取gems目录。

在chef中,您可以找到rubygems在
节点[“语言”][“ruby”][“bin_dir”]
中创建可执行文件的目录。因此,你不应该在食谱中硬编码这些路径,因为它们可能会改变

至于您的确切问题:在Ruby>=1.9.1和<2.0.0中,rubygems将gems安装到
1.9.1
目录中,以表示它对1.9.1的使用。这样做的目的是,使用此ABI编译的gems可以在不同的ruby版本之间互换使用。然而,在实践中,这变得更加困难


Ruby 2.0.0使用
2.0.0
目录。同样,您不应该硬编码路径,而应该使用node属性(由OHAI使用rubygem自己的工具设置)。

感谢您对我的问题的具体回答和一些背景故事!!如果我在厨师烹饪期间安装了一个新的系统ruby,这个路径会被更新吗?这样我就可以使用
gem\u包
安装一个带有新ruby的gem了@iain@holger Just如果您更改了ruby,而不是chef运行的最开始,则必须使用
ohai
资源重新加载信息。此外,您应该确保在安装任何其他gem之前执行此操作,以确保安装目标一致。
$ gem env gempath