厨师配方编译错误

时间:2013-10-16 20:30:57

标签: ruby chef vagrant chef-recipe

有谁知道为什么以下代码会导致错误:未定义的方法'tar'代表“riak-1.4.2”:字符串

remote_file "/vagrant/usr/src/#{node.default['riak']['version'].tar.gz}" do
  source "#{node.default['riak']['url']}"
  mode 0755
  notifies :run, "bash[extract_riak]", :immediately
end

bash "extract_riak" do 
  code <<-EOH
    # Following is the line which causes the error.
    /bin/tar xzf /vagrant/usr/src/#{node.default['riak']['version']}.tar.gz -C /vagrant/usr/src/#{node.default['riak']['version']}
  EOH
  notifies :run, "bash[make_riak]", :immediately
end

3 个答案:

答案 0 :(得分:1)

此行引发错误:

remote_file "/vagrant/usr/src/#{node.default['riak']['version'].tar.gz}"

.tar.gz应该在括号之外,如下所示:

remote_file "/vagrant/usr/src/#{node.default['riak']['version']}.tar.gz"

括号之间的所有内容都作为ruby代码执行,结果将其放在字符串中。 node.default['riak']['version'].tar.gz是一系列函数调用,包括在最后调用不存在的targz函数。这些是文件名的一部分,应该放在括号内。

作为旁注,您可能希望使用node[:attribute] 获取属性,并仅使用node.default[:attribute] 设置属性。

答案 1 :(得分:0)

我建议ark cookbook作为处理档案的更好选择。

以下示例食谱:

include_recipe "ark"

ark "riak" do
  url "http://s3.amazonaws.com/downloads.basho.com/riak/1.4/1.4.2/riak-1.4.2.tar.gz"
  version "1.4.2"
end

将在“/usr/local/riak-1.4.2”目录下安装riak。

最后,还有一个riak cookbook,据说也会从源代码安装。

答案 2 :(得分:-1)

而不是:

#{node.default['riak']['version']}.tar.gz

你想要:

#{node.default['riak']['version'].tar.gz}