chef-infra - 菜谱中的cookbook_name - TypeError : no implicit conversion of Symbol into String

标签 chef-infra chef-recipe chef-solo

我的 Recipe 中有以下代码,但它出错了。

log "###" + cookbook_name + "::" + recipe_name + " " + Time.now.inspect + ": Starting execution phase"
puts "###" + cookbook_name + "::" + recipe_name + " " + Time.now.inspect + ": Starting compile phase"

错误是:

TypeError: no implicit conversion of Symbol into String
/test/chef/cookbooks/cookbook-server/recipes/setup_server.rb:10:in `+'

问题似乎出在 cookbook_namerecipe_name 等(那些没有硬编码的)。请帮忙。

最佳答案

当您在 Ruby 中对字符串执行 + 操作时,它不会将其他类型转换为字符串。如果您希望 Ruby 自动执行此操作,则需要进行插值,例如:

puts "### #{cookbook_name} :: #{recipe_name} #{Time.now.inspect} : Starting compile phase"

如果您想使用+,您需要将所有变量提供为字符串:

puts "###" + cookbook_name.to_s + "::" + recipe_name.to_s + " " + Time.now.inspect + ": Starting compile phase"

我建议你使用第一种方法。

关于chef-infra - 菜谱中的cookbook_name - TypeError : no implicit conversion of Symbol into String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28842642/

相关文章:

ubuntu - Chef 中缺少节点的 FQDN

ruby - 错误引导 - 非法指令

ruby - 如何将cookbook_file与bash结合使用?

linux - chef 用户资源不会更新现有用户的主目录(如果它已经存在)

Mysql Service Recipe 抛出未定义方法错误

ruby - 如何使用 include_recipe 检查 Recipe 是否已被包含?

chef-infra - 在 Chef Recipe 中,如何根据角色分配 erb 模板

ruby - 遍历 ENV 并将结果写入 Chef 中的文件

ruby - 使用 Chef's Cookbook Recipe 动态覆盖属性

postgresql - 使用 Vagrant/Chef-solo 设置 postgresql 密码