有最新的 ruby 食谱吗?我在 opscode 食谱网站上找不到。即红宝石 1.9.3 或 1.9.2p280。
3 回答
我刚刚完成了Carlo Zottman 的ruby 1.9.x 食谱的更新(在吃午饭的时候注意到了这个问题,在写一个拉取请求之前,哈哈......)
唯一的依赖是来自 opscode cookbook 站点的标准 build-essential 和 apt 食谱。
至于何时可能需要这样一本食谱的讨论,在使用 rbenv 食谱(以及其他各种食谱)之前,我正在使用它在我的 12.04.01 vagrant 盒子上从 ruby 1.8 升级到 ruby 1.9。
我意识到我应该能够使用 rbenv cookbook 来安装 1.9.3,但是在尝试了几个小时没有成功之后,我意识到无论如何我对源代码安装更满意,因为它使我的整个食谱堆栈不那么脆。而作为流浪用户的 rbenv 安装 1.9.3 的 shell 脚本编写起来很简单。
更新
我找到了一种依赖更少的替代方法(是的!)我正在使用Fletcher Nichol 的食谱:
- 来自opscode社区页面的 ruby_build
- 来自 github 的chef-rbenv(与 opscode 的 rbenv 食谱不同)
严格来说,当然,您可以只使用 ruby_build 安装您喜欢的 1.9 并停止,但我也想要 rbenv。
我已经从我的设置中包含了一些片段(当然,还有更多的 Berksfile 和 Vagrantfile,但这些都是相关的部分。)唯一真正棘手的部分是如果你想使用的话,chef-rbenv
食谱的本地名称必须是rbenv
任何现成的食谱,包括食谱中的其他现成食谱,因为它称自己为 rbenv。Berkshelf 让这变得微不足道。
group :ruby do
cookbook 'ruby_build'
cookbook 'rbenv', git: 'https://github.com/fnichol/chef-rbenv'
end
流浪文件:
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = 'chef/cookbooks'
chef.roles_path = 'chef/roles'
chef.json = {
'rbenv' => {
'global' => '1.9.3-p194',
'rubies' => [ '1.9.3-p194' ],
'gems' => {
'1.9.3-p194' => [
{ 'name' => 'bundler' }
]
}
}
}
chef.add_role 'ruby'
end
厨师/角色/ruby.json:
{
"name": "ruby",
"description": "Install ruby and rbenv",
"chef_type": "role",
"json_class": "Chef::Role",
"run_list": [
"recipe[ruby_build]",
"recipe[rbenv::system]"
]
}
最后的评论是,一旦我想出了解决方案,我意识到维克多的答案很可能是同一件事的厨师服务器版本。到目前为止,我只使用过 chef-solo,所以我不确定。
我不确定您是否会找到一个用于更新 Ruby 系统版本的工具,因为 chef 是建立在 Ruby 之上的,因此会在运行时进行自我更新,我不确定这是否可能。
但是,我肯定看过针对 RBenv 和 RVM 等 Ruby 版本管理器的 Chef 食谱,例如这本用于 rbenv,而这本用于 RVM。这是用于服务器还是 OSX 开发盒?如果是后者,那么我发现Smeagol在配置机器时是一个非常方便的快捷方式。
我认为最简单的方法是使用两本食谱:ruby_build 和 rbenv。在您的角色 ( <proj>/roles/role_name.rb
) 中:
name "your-role-name"
description "All the shelves!"
run_list(
"recipe[ruby_build]",
"recipe[rbenv::system]"
)
override_attributes(
'rbenv' => {
'global' => '1.9.2-p280',
'rubies' => [
'1.9.2-p280'
]
}
)
将这个角色(最好在需要这些红宝石的其他角色之前)添加到你的运行列表中应该可以做到。
要编辑运行列表:
knife node edit <node name>
不要忘记更新角色!knife role from file role_name.rb
最后,与 rvm 相比,rubyenv 可能是一种更简洁的 rubies 管理方式。