有谁知道为什么以下代码会导致错误:未定义的方法'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
答案 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
是一系列函数调用,包括在最后调用不存在的tar
和gz
函数。这些是文件名的一部分,应该放在括号内。
作为旁注,您可能希望使用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}