2013-10-29 78 views
1

我与流浪汉和厨师有这个问题。 我已经准备好使用Vagrantfile和厨师食谱。 基本上vagrantfile是由一些env变量配置的,所以我可以从Vagrantfile创建新的虚拟机,并且所有配置和配置都由厨师完成,但是一旦虚拟机完成,厨师就无法工作。流浪汉提供后没有发现厨师宝石

当我执行“流浪者提供”我收到此错误信息:

/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

我曾经有过一个类似的问题:厨师宝石已经出现在机器上(/ opt/vagrant-ruby/bin或类似的东西),但是当安装rvm时,它不再存在于PATH中。然而,我没有真正解决这个问题,并选择从源代码安装红宝石没有rvm而是... – MrRuru

+0

感谢评论,我现在检查PATH变量,似乎可能有问题...还不确定,但至少有一些东西。我有点想法.. – stibi

+1

http://fnichol.github.io/chef-rvm/显然定义了访问Vagrant虚拟机中的chef-solo二进制文件的自定义配方。没有尝试,虽然 – MrRuru

回答

0

你需要包括vagrant recipe。它做了两件事:添加vagrant用户到rvm组,并安装厨师独奏/厨师 - 客户端包装脚本。

记住指向使用node['rvm']['vagrant']['system_chef_solo']node['rvm']['vagrant']['system_chef_client']属性包装到正确的二进制(取决于系统红宝石所在地)。

举例厨师独奏:

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)| 伟大的作品
  • 使用vagrant-omnibus plugin | 由于您的厨师运行安装rvm和红宝石由@马克 - 奥康纳建议/还应努力
0

,你必须改变chef-solo是如何被执行才有的rvm system do chef-solo前缀。这将确保rvm从主厨OmniBus ruby​​或其他任何想要/需要使用的ruby中脱身。

在我vagrantfile,我使用shell供应方运行厨师独奏这样的:

# 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 
0

我包括流浪配方为好,但这并没有彻底解决问题。

添加以下作为我的食谱属性:

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

,因为我的默认厨师的客户端和厨师独奏可执行文件是在/ usr/bin中

的RVM流浪配方增加了一些包装脚本放入/ 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" 
相关问题