【问题标题】:Using vagrant and chef-solo, how can I specify which version of ruby to run?使用 vagrant 和 chef-solo,我如何指定要运行的 ruby​​ 版本?
【发布时间】:2013-04-16 15:00:02
【问题描述】:

我正在使用 chef-solo 来配置一个新的 vagrant VM。这是 Ubuntu 12.10。 Chef 第一次运行良好,但此后任何时候都无法启动。

问题是 chef-solo 需要使用 ruby​​ 1.9.3 运行,但我的一本食谱安装了 ruby​​ 2.0.0。它将新版本的 ruby​​ 链接到 /usr/local/ruby,因此系统版本仍然在 /usr/bin/ruby 中可用。

/usr/bin/chef-solo 中的 shebang 行是 #!/usr/bin/env ruby

有没有办法在 chef-solo 运行之前在 Vagrantfile 中设置环境变量?还是有其他方法可以强制 vagrant 使用 /usr/bin/ruby 运行 chef-solo?

更新:我目前在 VM 上使用以下命令作为解决方法:

sudo /usr/bin/ruby /usr/bin/chef-solo --config /tmp/vagrant-chef-1/solo.rb --override-runlist "my_runlist"

当我在主机上键入 vagrant provision 时,我想强制 Vagrant 运行类似的东西。

【问题讨论】:

  • chef-solo 在你的 VM 中运行 - 你想控制在那里或你的主机上使用哪个 Ruby 版本?
  • 在虚拟机上。我为上述问题添加了说明/解决方法。

标签: ruby ubuntu chef-infra vagrant chef-solo


【解决方案1】:

/usr/bin/env 通过使用 $PATH 来查找可执行文件。您应该确保 /usr/bin/ruby 位于路径的前面。确保这一点的一种方法是:

export PATH=/usr/bin:$PATH

..然后尝试你的厨师独奏。

更多来自:http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability

通常,程序 /usr/bin/env 可以用来规避这个 通过引入间接级别来限制。 #!紧随其后的是 /usr/bin/env,后跟没有完整路径的所需命令,如 这个例子:

!/usr/bin/env sh

这主要是因为路径 /usr/bin/env 通常用于 env 实用程序,它会调用找到的第一个 sh 在用户的 $PATH 中,通常是 /bin/sh,如果用户的路径是 正确配置。

【讨论】:

  • 谢谢,但我不知道如何在vagrant provision运行的上下文中设置PATH变量。在 /usr/local/bin 之前全局添加 /usr/bin 会适得其反,并且会破坏 /usr/local 约定的目的。
  • 是的,听起来像为vagrant provision 设置PATH 确实是您所需要的。您可能想尝试使用 shell 配置器来包装使用不同路径的 chef-solo 运行。
  • 与其尝试改变 vagrant 的功能(并且适合大多数用户),不如考虑使用 RVM 或 rbenv 之类的 ruby​​ 版本管理器,或者安装 Chef(“Omnibus”安装程序:opscode.com/chef/install)封装的环境作为一个二进制文件,与它自己的 Ruby 版本捆绑在一起
  • @cmur2 使用 rbenv 是一个非常好的建议。事实上,chef-rbenv 食谱甚至包含一个“流浪”食谱,可以解决这个问题。
【解决方案2】:

使用vagrant omnibus plugin,您可以安装具有自己嵌入式 Ruby 的 Chef Omnibus,以保证 Chef 运行始终使用相同的 Ruby 版本。

我发现的唯一问题是,如果您的食谱依赖于系统版本的 ruby​​,则某些设置将无法正常工作(例如,如果您 shell_out!,则无法使用安装在 /usr/local/bin 中的 ruby在食谱中,但会在/usr/bin 中安装)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2012-03-29
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多