У меня есть кулинарная книга повара для сообщества JRuby. У меня возникла проблема с указанием версии устанавливаемого Gem. Я буквально пробовал каждую комбинацию хэшей, клавиш, строки и т. Д., О которых я могу думать.Как указать параметры в хеше
Вот соответствующие части кода:
default[:jruby][:gems] = ["some-gem", "another-one"]
Да, это массив строк, а массив хэшей должно быть возможным.
Это читается следующим фрагментом:
node[:jruby][:gems].each do |gem|
Chef::Log.info "Installing Jruby Gem #{gem}"
if gem.is_a? Hash
name = gem.delete(:name)
else
name = gem
gem = nil
end
jruby_gem name, gem || {}
end
И оседают в руках этого определения:
define :jruby_gem, :source => nil, :version => nil do
gem_package params[:name] do
gem_binary "#{node[:jruby][:install_path]}/bin/gem"
source params[:source] if params[:source]
version params[:version] if params[:version]
end
end
Учитывая, что код, то, что хэш хэшей заполнит :name
и :version
значения в полученном определении?
Вещи я пытался в следующей области ...
[
{:name => "some-gem", :version => "0.1.2"},
{:name => "another-one"} # I don't need to constrain every Gem to a version
]
Edit:
Так что спасибо за совершенно правильных рубин эск ответов, но на самом деле я попробовать массив хэши в нескольких вариантах, прежде чем перейти к SO. Усталость заставила меня очертить структуру, которая первоначально появилась в моем вопросе.
Проблема, которую я вижу, по-видимому, касается шеф-повара и определения, которое вы видите выше. Я получаю ошибку следующим образом ...
Node attributes are read-only when you do not specify which precedence level to set. To set an attribute use code like `node.default["key"] = "value"'
Cookbook Trace:
---------------
/var/chef/cache/cookbooks/jruby/recipes/default.rb:48:in `block in from_file'
/var/chef/cache/cookbooks/jruby/recipes/default.rb:45:in `each'
/var/chef/cache/cookbooks/jruby/recipes/default.rb:45:in `from_file'
Relevant File Content:
----------------------
/var/chef/cache/cookbooks/jruby/recipes/default.rb:
41: notifies :create_if_missing, "file[/etc/profile.d/jruby.sh]"
42: end
43:
44: # install all gems defined in the module
45: node[:jruby][:gems].each do |gem|
46: Chef::Log.info "Installing Jruby Gem #{gem}"
47: if gem.is_a? Hash
48>> name = gem.delete(:name)
49: else
50: name = gem
51: gem = nil
52: end
53: jruby_gem name, gem || {}
54: end
55:
'[«некоторые-камень»,«другой-один»]' является массивом, а не хэш ... – user12341234
Это хороший момент. Это функция моего усталости, а не быть глупым. :) –