繁体   English   中英

使用vagrant和chef-solo,我如何指定要运行的红宝石版本?

[英]Using vagrant and chef-solo, how can I specify which version of ruby to run?

我正在使用Chef-solo来配置新的无用虚拟机。 它是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中设置环境变量吗? 还是有另一种方法来强制流浪汉使用/ usr / bin / ruby​​运行Chef-solo?

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

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

当我在主机上键入vagrant provision时,我想强迫Vagrant运行类似的操作。

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

export PATH=/usr/bin:$PATH

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

这里的更多信息来自: http : //zh.wikipedia.org/wiki/Shebang_(Unix)#Portability

通常,可以通过引入间接级别来使用程序/ usr / bin / env来规避此限制。 #! 后面是/ usr / bin / env,然后是没有完整路径的所需命令,如本例所示:

!/ usr / bin / env sh

之所以能成功,是因为/ usr / bin / env路径通常用于env实用程序,并且如果正确配置了用户的路径,它将调用用户$ PATH中的第一个sh,通常是/ bin / sh。

使用无业游民的omnibus插件,您可以安装拥有自己的嵌入式Ruby的Chef Omnibus,以确保Chef运行始终使用相同的Ruby版本。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM