2015-05-04 71 views
2

我是厨师的新手,并开始使用用户库编写简单的食谱。我Berksfile:致命错误:NoMethodError:未定义的方法`unreachable_cookbook?'为零:NilClass

[email protected]:~/chef-repo$ cat Berksfile 
site :opscode 

cookbook "users" 

,然后我跑:

berks install 

和我的食谱:

[email protected]:~/chef-repo$ ls cookbooks/ 
users 

终于我的食谱:

[email protected]:~/chef-repo$ cat blah-users.rb 
include_recipe "users" 

users_manage "blah-dev" do 
    group_id 1001 
    action [ :remove, :create ] 
end 

当我appply我得到一个错误:

[email protected]:~/chef-repo$ chef-apply blah-users.rb 
[2015-05-04T09:05:48-04:00] FATAL: Stacktrace dumped to /home/name/.chef/cache/chef-stacktrace.out 
[2015-05-04T09:05:48-04:00] FATAL: NoMethodError: undefined method `unreachable_cookbook?' for nil:NilClass 

我相当肯定的是,include_recipe“用户”是问题(至少第一个)。我也发现这行Stacktrace转储到/home/name/.chef/cache/chef-stacktrace.out有趣的是,在那个位置没有文件。

我尝试过和没有sudo。所以我不认为这是一个权限问题。

我运行一个本地安装的厨师服务器12.3看起来能正常运行罚款......

感谢


~/chef-repo$ sudo chef-apply blah-users.rb -l debug 

[2015-05-04T13:17:50-04:00] DEBUG: Building node object for tbrown 
[2015-05-04T13:17:50-04:00] DEBUG: Extracting run list from JSON attributes provided on command line 
[2015-05-04T13:17:50-04:00] DEBUG: Applying attributes from json file 
[2015-05-04T13:17:50-04:00] DEBUG: Platform is ubuntu version 14.04 
[2015-05-04T13:17:50-04:00] INFO: Run List is [] 
[2015-05-04T13:17:50-04:00] INFO: Run List expands to [] 
[2015-05-04T13:17:50-04:00] DEBUG: Loading Recipe users via include_recipe 
[2015-05-04T13:17:50-04:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out 
[2015-05-04T13:17:50-04:00] DEBUG: NoMethodError: undefined method `unreachable_cookbook?' for nil:NilClass 
/opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:257:in `unreachable_cookbook?' 
/opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:155:in `load_recipe' 
/opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:142:in `block in include_recipe' 
/opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:141:in `each' 
/opt/chefdk/embedded/apps/chef/lib/chef/run_context.rb:141:in `include_recipe' 
/opt/chefdk/embedded/apps/chef/lib/chef/dsl/include_recipe.rb:26:in `include_recipe' 
blah-users.rb:1:in `run_chef_recipe' 
/opt/chefdk/embedded/apps/chef/lib/chef/application/apply.rb:168:in `instance_eval' 
/opt/chefdk/embedded/apps/chef/lib/chef/application/apply.rb:168:in `run_chef_recipe' 
/opt/chefdk/embedded/apps/chef/lib/chef/application/apply.rb:180:in `run_application' 
/opt/chefdk/embedded/apps/chef/lib/chef/application/apply.rb:193:in `run' 
/opt/chefdk/embedded/apps/chef/bin/chef-apply:25:in `<top (required)>' 
/usr/bin/chef-apply:51:in `load' 
/usr/bin/chef-apply:51:in `<main>' 
[2015-05-04T13:17:50-04:00] FATAL: NoMethodError: undefined method `unreachable_cookbook?' for nil:NilClass 
+1

愿你尝试用'厨师申请等等,users.rb的-l debug'。总之,我不确定厨师 - 申请可以用于依赖(即需要从另一个食谱的配方),因为它只是用来运行一小部分内部资源,并且没有烹饪书的加载(所以没有读取'metadata.rb'因为没有)。我能想到的最佳解决方法是使用chef-solo或chef-zero(请参阅http://docs.chef.io查看已发布的信息),并在其metadata.rb文件中具有正确的依赖关系。 – Tensibai

+1

metadata.rb需要“依赖”“用户”菜谱 – akaphenom

+0

您可能想要添加该答案(并接受它),以便稍后有人发现此问题时,他们可以轻松找到答案。 –

回答

1

后评论:

当使用include_recipe的地方,承载这个食谱的食谱必须被加载,有两种方式得到它加载:

  1. 有它在运行列表
  2. 使用depends "cookbook", "version limitation"metadata.rb文件中的食谱包括使用chef-apply我们运行一个特殊的配方,而不是运行列表,因此1没有其他(Documentation

这里申请和2不能申请,没有食谱加载,只有一个配方。旨在使用内部厨师资源而不是LWRP的Chef-apply

使用多重烹饪书的方法是创建一个烹饪书并在其metadata.rb文件中有一个依赖指令。

之后,你可以用chef-solochef-zero指定在命令行运行列表以'-r-o运行这个食谱,这将允许加载所有需要的食谱,使从可用取决于食谱的LWRP。关于厨师的客户端模式(独奏和零只是快捷方式)

更多扩展文件可here

+0

的关注@akaphenom可以随意发表评论,如果我遗漏了一些东西,我会根据需要进行编辑 – Tensibai

+1

当然需要将食谱放在食谱中,将食谱和相关食谱上传到厨师服务器,然后通过metadata.rb参考配方,我怀疑我的耐心是我需要努力的。我无法站在“你好世界”教程的页面。谢谢 – akaphenom

相关问题