Chef infra 大海大厨不';我找不到我的rbenv ruby

Chef infra 大海大厨不';我找不到我的rbenv ruby,chef-infra,rbenv,Chef Infra,Rbenv,我正在尝试安装一个ruby的全局版本,其他厨师菜谱会将其识别为ruby系统。我正在尝试这样做,它似乎在用户层面上起作用,但在chef运行ohai时不起作用。我说当chef运行ohai时它不起作用,因为像referencenode['languages']['ruby']['ruby\u bin']这样的食谱指向“/usr/bin/ruby”。但是,当我以用户身份运行ohai登录时,我会得到rbenv垫片的位置。在我的rbenv配置中是否缺少看到此行为的内容 其他信息: 平台-亚马逊(ami-05

我正在尝试安装一个ruby的全局版本,其他厨师菜谱会将其识别为ruby系统。我正在尝试这样做,它似乎在用户层面上起作用,但在chef运行ohai时不起作用。我说当chef运行ohai时它不起作用,因为像reference
node['languages']['ruby']['ruby\u bin']
这样的食谱指向“/usr/bin/ruby”。但是,当我以用户身份运行ohai登录时,我会得到rbenv垫片的位置。在我的rbenv配置中是否缺少看到此行为的内容

其他信息:

平台-亚马逊(ami-05355a6c)

运行列表:

配方[ruby_build]
配方[ohai]
配方[rbenv::系统]
配方[基本构建]
配方[apache2]
配方[passenger_apache2]
配方[passenger_apache2::mod_rails]

--更新

我从未让chef客户端ohai选择我的rbenv设置,但这不再是一个问题,因为我最终覆盖了角色中的节点属性。这只可能是由于最近的更改(乘客_apache2提交-a0a32fda0b56228d6e54163c98f6736e17cad12c)


注意:omnibus可能也解决了我的问题。

您可以在配方或节点级别覆盖默认属性

我想这就是语法

...
"languages": {
  "ruby": {
    "ruby_bin" : "/usr/bin/ruby42"}
},
...
有一个Ohai插件可以做到这一点。你可以:

  • 把烹饪书换成这本
  • 查看一下
    rbenv::ohai_插件
    recipe,并在您的环境中复制它(就像在包装器烹饪书中一样)

由于烹饪书的不同,第一个选项可能无法满足您的需求,而第二个选项可能比看起来更难(我没有尝试过…)

您为什么要这样做?Chef附带了一个嵌入式ruby副本,您应该喜欢它,因为它增加了可靠性。像passenger这样的软件应该支持ruby系统。也许你的问题应该集中在让像passenger这样的系统使用rbenv,而不是食谱。我这样做是因为我有需要ree-1.8.7的遗留应用程序。让乘客使用rbenv就像在配置文件中硬编码路径一样简单。我更喜欢由ohai确定路径,就像目前乘客食谱中的编码一样。(如果可能的话)我已经在角色和节点级别尝试过了,但没有任何运气“语言”:{“ruby”:{“ruby_-bin”:“/usr/local/rbenv/versions/ree-1.8.7-2012.02/bin/ruby”},`我试图避免在passenger_-apache2配方中硬编码,因为我使用不同的ruby进行部署。我开始认为我必须在菜谱属性中设置一些条件,这不是理想的。这不起作用。如果您通读Chef docs中的部分,您将看到Ohai在所有属性中具有最高的优先级,因此最终它将覆盖您试图在菜谱、属性、角色和环境中强制设置的所有属性。cbl是正确的,如果这是Ohai自动属性,则此方法将不起作用。很抱歉,我生活在windows世界:/cbl,感谢您的回复。我已经根据你链接的烹饪书和ohai的资料整理了一份报告。不幸的是,我仍然有问题,因为chef shell没有选择全球rbenv。注意:如果我以root用户身份运行chef客户端,那么所有rbenv路径都是正确的。