我想用Ruby 1.9.2配置一个新的Ubuntu 10.04盒子。我正在使用Vagrant和Chef Solo为盒子提供我需要的一切(例如Rails,Rake,MongoDB)。默认的Ruby版本是1.8.7。
有没有办法将Ruby 1.9.2作为Vagrant / Chef配置流程的一部分安装?
我在Chef网站上读到了关于使用我自己的bootstrap模板 - 可能是用刀 - 例如this one,但是因为我使用的是Vagrant我不知道在哪里放这个模板 - 我不知道没有chef-repo,.chef目录,甚至是/ etc / chef中安装的任何Chef东西。
答案 0 :(得分:11)
首先,一点上下文。大多数Vagrant基本框都安装了Ruby供Chef和Puppet使用,但是最新的基本框用于/ opt / ruby而不是使用系统包。他们还将/ opt / ruby / bin添加到路径中,但最后添加。
此VeeWee模板显示当前如何构建10.04框:https://github.com/jedi4ever/veewee/blob/master/templates/ubuntu-10.04.3-server-i386/postinstall.sh
至于你的问题,他们可能会尝试解决几种不同的情况,每种情况都有不同的解决方案。希望其中一个将是您正在寻找的。 p>
使用1.9.2运行Chef食谱
您可能想要在1.9.2下测试正在运行的Chef配方,并且您不希望1.8.7在您的盒子附近的任何地方。解决这个问题的最佳方法是创建自己的VeeWee模板并为自己构建一个新的basebox。您可以修改上面链接的那个以编译1.9.2而不是1.8.7并按照https://github.com/jedi4ever/veewee
上的说明进行操作使用Ruby 1.9.2进行开发
可能更有可能的是你想使用1.9.2破解一些Ruby代码。为此,您只需安装Ruby并在/ opt / ruby条目之前在路径上包含二进制文件。有几种方法可以做到这一点:
所有这些都可以使用Chef食谱进行管理。我可能不会选择编译选项,只留下直接的下载和包资源,或者下面的RVM cookbook对于RVM可能很方便http://community.opscode.com/cookbooks/rvm。
包资源上的* gem_binary *选项在这里也可能有用,具体取决于您希望如何确保为新的1.9.2 Ruby安装gem(而不是1.8.7 in opt)
knife bootstrap
的目标是在目标系统上安装Chef,以便它可以运行Chef Client。 Vagrant baseboxs往往已经安装了Chef,所以除非你正在做一些特定的事情,并且想要运行多个版本的Chef,否则我会避开这条路线。像http://vagrantup.com/docs/provisioners/chef_solo.html这样的内置主厨供应商是更好的选择。
答案 1 :(得分:2)
我知道这个问题已经很老了,而且已经回答了,但我希望对于这个问题绊倒的人来说,这仍然很有趣。
我已经构建了一个Github repo,它打算提供几个配置,用于构建和配置Vagrant框,而无需从头开始编写配置文档。
例如,使用当前提供的配置,您可以使用以下内容构建和配置框
我的博客上有introduction article。
由于这几乎与请求相符,我觉得值得添加这个迟到的答案:)
答案 2 :(得分:0)
这是我用来安装Ruby 1.9.2的配方
package "libffi5" do
action :install
provider Chef::Provider::Package::Apt
end
package "ruby-1.9.2" do
action :install
source "/tmp/vagrant-chef/cookbooks-0/ruby-1.9.2/files/default/ruby-1.9.2-p290_i386.deb"
provider Chef::Provider::Package::Dpkg
end