Ошибка при выполнении действия «установить» на ресурсе «chef_gem [mysql]» — установка ruby ​​gem через Chef Solo

Используя Chef 10.24.0, при включении database поваренной книги,

include_recipe "mysql::server"
include_recipe "database::mysql"

гем mysql не устанавливается со следующим выводом:

[2013-03-10T19:54:29+00:00] INFO: Processing chef_gem[mysql] action install (mysql::ruby line 36)

================================================================================
Error executing action `install` on resource 'chef_gem[mysql]'
================================================================================

NoMethodError
-------------
undefined method `last' for #<Gem::AvailableSet:0x00000002b25be0>

Cookbook Trace:
---------------
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/mysql/recipes/ruby.rb:36:in `from_file'
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/database/recipes/mysql.rb:20:in `from_file'
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/scafandru/recipes/database.rb:11:in `from_file'

Resource Declaration:
---------------------
# In /tmp/vagrant-chef-1/chef-solo-1/cookbooks/mysql/recipes/ruby.rb

 36: chef_gem "mysql"

Compiled Resource:
------------------
# Declared in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/mysql/recipes/ruby.rb:36:in `from_file'

chef_gem("mysql") do
  provider Chef::Provider::Package::Rubygems
  action :install
  retries 0
  retry_delay 2
  package_name "mysql"
  cookbook_name :mysql
  recipe_name "ruby"
end


================================================================================
Recipe Compile Error in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/scafandru/recipes/database.rb
================================================================================

NoMethodError
-------------
chef_gem[mysql] (mysql::ruby line 36) had an error: NoMethodError: undefined method `last' for #<Gem::AvailableSet:0x00000002b25be0>

Cookbook Trace:
---------------
  /tmp/vagrant-chef-1/chef-solo-1/cookbooks/mysql/recipes/ruby.rb:36:in `from_file'
  /tmp/vagrant-chef-1/chef-solo-1/cookbooks/database/recipes/mysql.rb:20:in `from_file'
  /tmp/vagrant-chef-1/chef-solo-1/cookbooks/scafandru/recipes/database.rb:11:in `from_file'

Relevant File Content:
----------------------
/tmp/vagrant-chef-1/chef-solo-1/cookbooks/mysql/recipes/ruby.rb:

 29:  include_recipe "build-essential"
 30:  include_recipe "mysql::client"
 31:  
 32:  node['mysql']['client']['packages'].each do |mysql_pack|
 33:    resources("package[#{mysql_pack}]").run_action(:install)
 34:  end
 35:  
 36>> chef_gem "mysql"
 37:  

[2013-03-10T19:54:31+00:00] ERROR: Running exception handlers
[2013-03-10T19:54:31+00:00] ERROR: Exception handlers complete
[2013-03-10T19:54:31+00:00] FATAL: Stacktrace dumped to /tmp/vagrant-chef-1/chef-stacktrace.out
[2013-03-10T19:54:31+00:00] FATAL: NoMethodError: chef_gem[mysql] (mysql::ruby line 36) had an error: NoMethodError: undefined method `last' for #<Gem::AvailableSet:0x00000002b25be0>
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.

Пытаясь сократить все переменные, которые могут привести к сбою установки, я отказался от database поваренной книги и ограничился установкой RubyGem в mysql::ruby рецепт

include_recipe "mysql::server"
include_recipe "mysql::ruby"

но ошибка была эквивалентной.

То же самое относится и к самой простой gem_package установке:

gem_package 'mysql' do
  options "--no-ri --no-rdoc"
end

У меня нет идей, может ли кто-нибудь пролить свет на это?


person Marius Butuc    schedule 10.03.2013    source источник


Ответы (1)


После перехода на последнюю версию RubyGems до версии 2.0 (1.8.5) все работает. отлично.

Скорее всего, эта проблема будет решена в RubyGems 2.0.3.

person Marius Butuc    schedule 10.03.2013
comment
Кажется, это снова появилось в версии 2.1.9. - person dangerous.beans; 22.10.2013