首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用vagrant和chef-solo,我如何指定运行哪个版本的ruby?

使用vagrant和chef-solo,我如何指定运行哪个版本的ruby?
EN

Stack Overflow用户
提问于 2013-04-16 23:00:02
回答 2查看 1.3K关注 0票数 1

我正在使用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?

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

代码语言:javascript
复制
sudo /usr/bin/ruby /usr/bin/chef-solo --config /tmp/vagrant-chef-1/solo.rb --override-runlist "my_runlist"

当我在主机上输入vagrant provision时,我想强制Vagrant运行类似的命令。

EN

回答 2

Stack Overflow用户

发布于 2013-04-16 23:23:18

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

代码语言:javascript
复制
export PATH=/usr/bin:$PATH

..and然后尝试你的chef-solo run。

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

通常,程序/usr/bin/env可以通过引入一定程度的间接性来绕过此限制。#!后跟/usr/bin/env,后跟不带完整路径的所需命令,如下例所示:

!/usr/bin/env sh

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

票数 1
EN

Stack Overflow用户

发布于 2013-12-06 20:32:47

使用vagrant omnibus plugin,你可以安装Chef Omnibus,它有自己的嵌入式Ruby,以保证Chef的运行总是使用相同的Ruby版本。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16040421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档