2013-10-16 90 views
1

有誰知道爲什麼下面的代碼會導致錯誤:未定義的方法 '焦油' 爲 「了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 

回答

-1

相反的:

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

你想:

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

我想你可能會有那些錯誤的方式嗎? – borntyping

+0

如果'remote_file「/ vagrant/usr/src /#{node.default ['riak'] ['version']。tar.gz}」'工作,那麼我不明白爲什麼我的答案不適用。不過,我會說我沒有廚師的經驗,我只是在追查可疑的東西。 – Davidann

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]設置屬性。

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 

將安裝了Riak的 「/usr/local/riak-1.4.2」 目錄下。

最後,還有一個riak cookbook可用,據報道,它也將從源代碼安裝。