我和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设置。
也许你的一些提示可以帮助我,谢谢你!
答案 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'
}
}
}
此外,您还有两个选择:
rbenv
(此处为cookbook)| 效果很好 答案 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-client
和chef-solo
可执行文件。
为了解决这个问题,我还在Vagrantfile中添加了以下内容,该文件明确地将$PATH
设置为首先查看/ usr / local / bin:
chef.binary_env="PATH=/usr/local/bin:/usr/bin:/usr/sbin:/bin"