在完成流浪汉后,找不到厨师宝石

时间:2013-10-29 08:36:35

标签: ruby chef vagrant

我和Vagrant和厨师有这个问题。 我已准备好使用Vagrantfile和厨师烹饪书。 vagrantfile基本上由一些env变量配置,所以我能够从Vagrantfile创建新的虚拟机,并且所有的配置和配置都由chef完成,但是一旦虚拟机完成,厨师就无法工作。

当我执行“vagrant provision”时,我收到以下错误消息:

/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find chef (>= 0) amongst [bigdecimal-1.1.0, io-console-0.3, json-1.5.4, minitest-2.5.1, rake-0.9.2.2, rdoc-3.9.4] (Gem::LoadError)

我无法更改版本,不能破坏某些内容......正如您从错误消息中看到的那样,有rvm(1.15.8)。 Ruby版本1.9.3和厨师版本10.12.0。

在厨师确实工作之前,因为我能够创建虚拟机...... 但后来发生了一些变化,我无法找到什么...我会在所有的厨师角色/食谱/食谱中来回走动,但我无法弄明白:(

为所有用户安装了RVM,因此/etc/profile.d/rvm.sh用于env设置。

也许你的一些提示可以帮助我,谢谢你!

3 个答案:

答案 0 :(得分:0)

您需要加入vagrant recipe。它做了两件事:将流浪汉用户添加到rvm组并安装chef-solo / chef-client包装脚本。

记住使用node['rvm']['vagrant']['system_chef_solo']node['rvm']['vagrant']['system_chef_client']属性将包装器指向正确的二进制文件(取决于系统rubies的位置)。

chef-solo的例子:

chef.add_recipe "rvm::vagrant"

chef.json = {
  :rvm => {
    :vagrant => {
      :system_chef_solo => '/usr/lib/ruby/gems/1.8/gems/chef-11.4.0/bin/chef-solo',
      :system_chef_client => '/usr/lib/ruby/gems/1.8/gems/chef-11.4.0/bin/chef-client'
    }
  }
}

此外,您还有两个选择:

答案 1 :(得分:0)

由于您的厨师运行会安装rvm和红宝石,因此您必须更改chef-solo的执行方式,使其前缀为rvm system do chef-solo。这将确保rvm从主厨OmniBus红宝石或其他任何想要/需要使用的红宝石中脱颖而出。

在我的vagrantfile中,我使用shell provisioner来运行这样的chef-solo:

# with rvm installed, chef will not work with its ruby. must use system!
[ -f /usr/local/rvm/bin/rvm ] && pfx="rvm system do"

$pfx chef-solo -c /vagrant/chef-solo.rb -j /vagrant/chef-solo.js --no-fork

答案 2 :(得分:0)

我也包括了Vagrant食谱,但这并没有完全解决问题。

我在配方中添加了以下属性:

default.rvm.vagrant.system_chef_client = "/usr/bin/chef-client"
default.rvm.vagrant.system_chef_solo = "/usr/bin/chef-solo"

因为我的默认chef-client和chef-solo可执行文件位于/ usr / bin

RVM Vagrant配方在/ usr / local / bin目录中添加了几个包装器脚本。在我已经配置服务器一次之后尝试运行rvm provision时,看起来它完全忽略了/ usr / local / bin中的chef-clientchef-solo可执行文件。

为了解决这个问题,我还在Vagrantfile中添加了以下内容,该文件明确地将$PATH设置为首先查看/ usr / local / bin:

chef.binary_env="PATH=/usr/local/bin:/usr/bin:/usr/sbin:/bin"