【问题标题】:Chef ohai doesn't find my rbenv ruby厨师 ohai 没有找到我的 rbenv ruby
【发布时间】:2013-09-16 18:35:12
【问题描述】:

我正在尝试安装其他厨师食谱将识别为系统 ruby​​ 的全球版本的 ruby​​。我正在尝试使用chef-rbenv 执行此操作,这似乎在用户级别上工作,但在厨师运行 ohai 时不起作用。我说当厨师运行 ohai 时它不起作用,因为像 passenger_apache2 这样的食谱引用 node['languages']['ruby']['ruby_bin'] 指向“/usr/bin/ruby”。但是,当我以用户身份登录运行 ohai 时,我得到了 rbenv shim 位置。我是否在我的 rbenv 配置中遗漏了一些东西才能看到这种行为?

附加信息:

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

运行列表:

配方[ruby_build]
食谱[ohai]
配方[rbenv::system]
配方[构建必备]
配方[apache2]
食谱[passenger_apache2]
配方[passenger_apache2::mod_rails]

--更新

我从来没有让 chef-client ohai 获取我的 rbenv 设置,但这不再是问题,因为我最终覆盖了角色中的节点属性。这仅是由于最近的更改(passenger_apache2 commit -a0a32fda0b56228d6e54163c98f6736e17cad12c)才可能发生的。

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

【问题讨论】:

  • 为什么要这样做? Chef 附带了一个嵌入的 ruby​​ 副本,您应该喜欢它,因为它可以提高可靠性。像乘客这样的软件应该支持系统红宝石。也许你的问题应该集中在让像乘客这样的系统使用 rbenv,而不是食谱食谱。
  • 我这样做是因为我有需要 ree-1.8.7 的遗留应用程序。让乘客使用 rbenv 就像在配置文件中硬编码路径一样简单。我更喜欢由 ohai 确定路径,就像它目前在乘客食谱中编码一样。 (如果可能的话)

标签: chef-infra rbenv


【解决方案1】:

This cookbook 有一个 Ohai 插件可以做到这一点。你可以:

  • 为这本更换食谱;
  • 查看rbenv::ohai_plugin 配方并在您的环境中重现它(例如在包装食谱中)。

由于食谱的差异,第一个选项可能无法满足您的需求,而第二个选项可能比看起来更难(我没有尝试过...)

【讨论】:

  • cbl,感谢您的回复。我根据您链接的食谱和 ohai 源整理了一个ohai plugin。不幸的是,我仍然遇到问题,因为 chef shell 没有获取全局 rbenv。注意:如果我以 root 身份运行 chef-client,所有 rbenv 路径都是正确的。
【解决方案2】:

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

我认为这是语法

...
"languages": {
  "ruby": {
    "ruby_bin" : "/usr/bin/ruby42"}
},
...

【讨论】:

  • 我已经在角色和节点级别尝试过,但没有任何运气。 ` "languages": { "ruby": { "ruby_bin": "/usr/local/rbenv/versions/ree-1.8.7-2012.02/bin/ruby" } },` 我试图避免在乘客_apache2 配方,因为我使用不同的红宝石进行部署。我开始认为我必须在配方属性中设置一些不理想的条件。
  • 这行不通。如果您阅读 Chef 文档中的 Attributes 部分,您会发现 Ohai 在所有属性中具有最高优先级,因此最终它将覆盖您尝试在配方、属性、角色和环境中强制设置的任何内容。
  • cbl 是对的,如果这是 Ohai 自动属性,则此方法将不起作用。抱歉,我生活在 Windows 的世界里:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多