Ошибка компиляции рецепта шеф-повара

Кто-нибудь знает, почему следующий код приводит к ошибке: неопределенный метод 'tar' для "riak-1.4.2":String

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

person Ari    schedule 16.10.2013    source источник


Ответы (3)


Эта строка вызывает ошибку:

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] для установки атрибутов.

person borntyping    schedule 16.10.2013

Я рекомендую поваренную книгу ark как лучший выбор для работы с архивами.

Следующий примерный рецепт:

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. , который, как сообщается, также будет установлен из исходного кода.

person Mark O'Connor    schedule 16.10.2013

Вместо:

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

ты хочешь:

#{node.default['riak']['version'].tar.gz}
person David Weiser    schedule 16.10.2013
comment
Если remote_file "/vagrant/usr/src/#{node.default['riak']['version'].tar.gz}" сработало, то я не понимаю, почему мой ответ не должен работать. Однако я скажу, что у меня нет опыта работы с Chef, я просто выискиваю то, что выглядит подозрительно. - person David Weiser; 17.10.2013