NoMethodError:未定义方法`preferred_filename_on_disk_location'为零:NilClass

问题描述:

我是红宝石和厨师的新手。我试图通过模板资源创建一个文件。运行chef-apply命令后,出现“NoMethodError:未定义方法`preferred_filename_on_disk_location'为nil:NilClass”的错误。我试图谷歌它,但没有找到正确的解决方案。NoMethodError:未定义方法`preferred_filename_on_disk_location'为零:NilClass

请帮忙。

厨师申请abc.rb

配方:(厨师申请食谱)::(厨师申请配方) *模板[file.txt的]操作创建

================================================================================ 
Error executing action `create` on resource 'template[file.txt]' 
================================================================================ 

NoMethodError 
------------- 
undefined method `preferred_filename_on_disk_location' for nil:NilClass 

Resource Declaration: 
--------------------- 
# In abc.rb 

10: template "file.txt" do 
11:  source "file.erb" 
12:  mode "0666" 
13: end 
14: 

Compiled Resource: 

#在声明abc.rb:10:在`run_chef_recipe”

template("file.txt") do 
    action [:create] 
    retries 0 
    retry_delay 2 
    default_guard_interpreter :default 
    source "file.erb" 
    declared_type :template 
    cookbook_name "(chef-apply cookbook)" 
    recipe_name "(chef-apply recipe)" 
    mode "0666" 
    path "file.txt" 
end 

Platform: 
--------- 
x86_64-linux 

[2017-01-02T18:37:07-05:00]致命:堆栈跟踪转储到/var/chef/cache/chef-stacktrace.out [2017-01-02T18:37:07-0 5:00]致命错误:如果提交错误报告 [2017-01-02T18:37:07-05:00],请提供stacktrace.out文件的内容致命错误:NoMethodError:template [file.txt](( (主厨申请食谱)第10行)有一个错误:NoMethodError:未定义方法`preferred_filename_on_disk_location'为零:NilClass

+0

欢迎来到StackOverflow。请尝试修复您问题的格式 - 如果您的代码和错误消息格式正确,将会更容易地为您提供帮助。 –

+0

请看[ask]和[mcve] –

看起来好像chef-apply无法正确运行模板资源(请参阅https://tickets.opscode.com/browse/CHEF-5317)。作为运行食谱的更好方法,您应该使用chef-solo

该命令将是

chef-solo -o 'recipe[COOKBOOK_NAME]' -c CONFIG_FILE 

其中CONFIG_FILE包含厨师,例如一些配置

current_dir = File.dirname(__FILE__) 

file_cache_path '/tmp/chef-cache' 
cookbook_path ["#{current_dir}/cookbooks"] 
data_bag_path "#{current_dir}/databags" 
ssl_verify_mode :verify_none 

可以调用这个文件solo.rb,把它在你运行上面的厨师命令相同的目录,那么它看起来像

chef-solo -o 'recipe[COOKBOOK_NAME]' -c solo.rb 

你想要的菜谱的名称替换COOKBOOK_NAME如果要运行recipe_name.rb配方而不是default.rb配方,请添加::recipe_name

+1

可能值得添加一个链接到https://learn.chef.io,因为OP似乎缺乏厨师的基本知识。如果你只知道厨师申请(只针对本地主机的快速配置),那么从单一配方与厨师应用到食谱和厨师零或独奏并不那么容易 – Tensibai

+0

我解决了这个问题,使用厨师独奏这对当前版本是正确的。 – coderanger