поваренная книга шеф-повара не работает с неопределенным методом ohai `[]' для nil:NilClass

Я работаю над кулинарной книгой шеф-повара, чтобы настроить vanilla ubuntu 12.04.2 с nginx, postgresql и unicorn на моем бродячем ящике, но у меня проблемы с nginx, есть исключение

undefined method `[]' for nil:NilClass

при его установке кажется, что это связано с конфигурацией ohai.

Я разместил все, что у меня есть здесь:

https://github.com/DonGiulio/mychef

вот вывод от chef-solo:

Starting Chef Client, version 11.4.0
Compiling Cookbooks...

================================================================================
Recipe Compile Error in /var/chef/cookbooks/nginx/recipes/source.rb
================================================================================


NoMethodError
-------------
undefined method `[]' for nil:NilClass


Cookbook Trace:
---------------
  /var/chef/cookbooks/nginx/recipes/ohai_plugin.rb:27:in `from_file'
  /var/chef/cookbooks/nginx/recipes/source.rb:42:in `from_file'


Relevant File Content:
----------------------
/var/chef/cookbooks/nginx/recipes/ohai_plugin.rb:

 20:  #
 21:  
 22:  ohai 'reload_nginx' do
 23:    plugin 'nginx'
 24:    action :nothing
 25:  end
 26:  
 27>> template "#{node['ohai']['plugin_path']}/nginx.rb" do
 28:    source 'plugins/nginx.rb.erb'
 29:    owner  'root'
 30:    group  'root'
 31:    mode   '0755'
 32:    notifies :reload, 'ohai[reload_nginx]', :immediately
 33:  end
 34:  
 35:  include_recipe 'ohai::default'
 36:  


[2013-11-19T14:22:23+00:00] ERROR: Running exception handlers
[2013-11-19T14:22:23+00:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated
[2013-11-19T14:22:23+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2013-11-19T14:22:23+00:00] FATAL: NoMethodError: undefined method `[]' for nil:NilClass

и вот трассировка стека:

$ cat /var/chef/cache/chef-stacktrace.out
Generated at 2013-11-19 14:22:23 +0000
NoMethodError: undefined method `[]' for nil:NilClass
/var/chef/cookbooks/nginx/recipes/ohai_plugin.rb:27:in `from_file'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/mixin/from_file.rb:30:in `instance_eval'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/mixin/from_file.rb:30:in `from_file'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/cookbook_version.rb:346:in `load_recipe'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/run_context.rb:151:in `load_recipe'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/run_context.rb:132:in `block in include_recipe'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/run_context.rb:131:in `each'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/run_context.rb:131:in `include_recipe'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/dsl/include_recipe.rb:26:in `include_recipe'
/var/chef/cookbooks/nginx/recipes/source.rb:42:in `from_file'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/mixin/from_file.rb:30:in `instance_eval'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/mixin/from_file.rb:30:in `from_file'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/cookbook_version.rb:346:in `load_recipe'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/run_context.rb:151:in `load_recipe'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/run_context/cookbook_compiler.rb:139:in `block in compile_recipes'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/run_context/cookbook_compiler.rb:137:in `each'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/run_context/cookbook_compiler.rb:137:in `compile_recipes'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/run_context/cookbook_compiler.rb:74:in `compile'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/run_context.rb:86:in `load'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/client.rb:224:in `setup_run_context'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/client.rb:467:in `do_run'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/client.rb:200:in `run'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/application.rb:190:in `run_chef_client'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/application/solo.rb:239:in `block in run_application'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/application/solo.rb:231:in `loop'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/application/solo.rb:231:in `run_application'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/application.rb:73:in `run'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/bin/chef-solo:25:in `<top (required)>'
/usr/bin/chef-solo:23:in `load'
/usr/bin/chef-solo:23:in `<main>'

ОБНОВЛЕНИЕ 1. Я настраиваю коробку с помощью ruby-2.0.0-p247, может быть, есть зависимость от более ранней версии ruby?

ОБНОВЛЕНИЕ 2 Я пробовал с ruby-1.9.3-p448 на только что подготовленном ящике, та же проблема, без изменений.

Не могли бы вы мне помочь?

спасибо,


person Don Giulio    schedule 19.11.2013    source источник
comment
Это немного странно. Из того, что я вижу, кулинарная книга nginx зависит от кулинарной книги ohai (определена в metadata.rb), которая должна загружать атрибуты ohai. Можете ли вы просто попытаться явно включить поваренную книгу ohai в список запуска перед nginx?   -  person StephenKing    schedule 19.11.2013
comment
Я добавил depends 'ohai' перед depends 'nginx' в моем metadata.rb, и это дает мне точно такую ​​​​же проблему.   -  person Don Giulio    schedule 19.11.2013
comment
Это не имеет значения, так как nginx уже зависит от ohai. Но я имел в виду явное добавление его к похоти бега. Тем не менее.. мне непонятно, почему это происходит. Не могли бы вы опубликовать/вставить/показать более подробный вывод журнала (chef-client -l debug)? Вы самые последние версии всех поваренных книг?   -  person StephenKing    schedule 19.11.2013


Ответы (4)


Вы не указали, какую версию кулинарных книг ohai и nginx вы используете.

Хотя я не могу ответить на ваш вопрос, я могу дать несколько советов по управлению вашими кулинарными книгами с помощью менеджера зависимостей (подумайте о сборщике для кулинарных книг).

Установите Berkshelf

gem install berkshelf

Создайте файл Berkshelf

$ cat Berksfile

site :opscode

cookbook "nginx"

И используйте это, чтобы загрузить все кулинарные книги, связанные с nginx:

$ berks install -p cookbooks
Using nginx (2.0.0)
Using apt (2.3.0)
Using bluepill (2.3.0)
Using rsyslog (1.9.0)
Using build-essential (1.4.2)
Using ohai (1.1.12)
Using runit (1.2.0)
Using yum (2.3.2)

Опция "-p" помещает их в подкаталог "cookbooks":

$ ls -d cookbooks/*
cookbooks/apt       
cookbooks/build-essential  
cookbooks/ohai     
cookbooks/runit
cookbooks/bluepill  
cookbooks/nginx            
cookbooks/rsyslog  
cookbooks/yum
person Mark O'Connor    schedule 19.11.2013
comment
спасибо, клонировал все поваренные книги прямо из git-репозитория, попробую с berkshelf - person Don Giulio; 20.11.2013
comment
отлично, berkshelf - это то, что мне было нужно, большое спасибо, теперь это решено. - person Don Giulio; 20.11.2013
comment
у вас есть ссылка на какую-нибудь подходящую документацию для berkshelf? Я не понимаю, какова структура шаблона поваренной книги, созданного berkshelf. и другие вещи. - person Don Giulio; 20.11.2013
comment
misheska.com/blog /2013/06/16/ нашел это. - person Don Giulio; 20.11.2013
comment
У меня была та же ошибка, но я обнаружил, что мне пришлось удалить «ohai» из моего Berksfile — nginx уже вызывал его как зависимость. - person JayCrossler; 26.01.2014
comment
Я использовал бродячий плагин vagrant-berkshelf и получил ту же ошибку, но когда я сделал gem install berkshelf, я получил ошибку can't find gem berkshelf - person svassr; 26.08.2016
comment
Это потому, что Vagrant Berkshelf больше не мог найти исполняемый файл 'berks' в моем PATH. Это установлено Chefdk, поэтому мне пришлось переустановить Chefdk. - person svassr; 26.08.2016

Я испытал ту же ошибку. Вы можете найти 3 других решения этой проблемы и объяснение, почему это происходит -difference/20375077#20375077">здесь в stackoverflow.

Чтобы упомянуть один для тех, кто использует Vagrant: просто включите рецепт через Vagrantfile «chef.add_recipe ()».

Использование Berkshelf, очевидно, решает проблему, и мне это, честно говоря, нравится. Просто подумайте, что мы должны сэкономить время тех, кто не хочет возиться с установкой новых инструментов.

person Konzulic    schedule 05.12.2013

Столкнулся с этой попыткой использовать поваренную книгу нексуса сообщества. Решил это, указав последнюю версию поваренной книги nginx в моем metadata.rb: depends 'nginx', '>= 2.7.6'

В metadata.rb поваренной книги Nexus указаны: depends "nginx", ">= 1.8.0"

Похоже, что шеф-повар выберет 1.8.0 при разрешении отложений, если вы не укажете более новую версию.

person loafdog    schedule 02.11.2016

похоже, что библиотеки ruby ​​​​отсутствовали, я установил ruby, выполнив следующую команду в Ubuntu, и он начал работать для меня

apt-get install ruby
person TECHISH    schedule 30.11.2013