使用Ruby 1.9.3作为默认值的Vagrant

时间:2013-06-03 13:47:36

标签: ruby chef vagrant rbenv chef-solo

嘿,我正在努力建立一个流浪者的vm。我正在使用chef-solo进行配置,并使用chef-rbenv来管理我的版本。所以在vagrantfile中我指定了

config.vm.provision :chef_solo do |chef|
  chef.cookbooks_path = "cookbooks"
  chef.add_recipe "ruby_build"
  chef.add_recipe "rbenv::system"
  chef.add_recipe "rbenv::vagrant"
  ...

  chef.json = { 
    "rbenv" => {
      "rubies" => [ "1.9.3-p327" ],
      "global" => "1.9.3-p327",
      "gems" => {
      "1.9.3-p327" => [
        { "name" => "bundler" }
        ]
      }
    }
  }
end 

这样默认的ruby版本将是1.9.3-p327,但它会崩溃

Error executing action `install` on resource 'rbenv_ruby[1.9.3-p327] (system)'

如果我没有在vagrant文​​件中指定版本(如上所示),并使用chef构建的默认rbenv,以便我可以在vm中安装它。然后我得到了这个

vagrant@precise64:/vagrant$ rbenv install 1.9.3-p327
Downloading yaml-0.1.4.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/36c852831d02cf90508c29852361d01b
Installing yaml-0.1.4...

BUILD FAILED
...

当我运行sudo rbenv install 1.9.3-p327时它会起作用但是当运行任何东西时我必须用sudo作为前缀ruby -v

vagrant@precise64:~$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]
vagrant@precise64:~$ sudo ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin12.3.0]

我怎么能用chef-solo安装它。我整个星期都试过,根本无法工作。

1 个答案:

答案 0 :(得分:4)

json要求你为chef指定你安装ruby的rbenv位置。因为食谱要求你在系统级安装rbenv,然后在这种情况下安装用户lvl。

chef.add_recipe "rbenv::system"
chef.add_recipe "rbenv::vagrant"

所以我把json更改为:

chef.json = {
  'rbenv' => {
    'user_installs' => [
      {
        'user'    => 'vagrant',
        'rubies'  => ['1.9.3-p327'],
        'global'  => '1.9.3-p327',
        'gems'    => {
          '1.9.3-p327' => [
            { 'name'    => 'bundler' },
            { 'name'    => 'rake' }
          ]
        }
      }
    ]
  }
}

目前的rbenv食谱也经常出现虫子,因此很好地参考了cheffile中最新版本的食谱。

cookbook 'rbenv', git: 'git://github.com/fnichol/chef-rbenv.git', ref: "v0.7.2"
像这样。