cookbook_name in recipe- TypeError: no implicit co

2019-05-28 02:02发布

问题:

I have the following code in my recipe but it errors.

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

The error is:

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

The issue seems to be with the cookbook_name, recipe_name etc.(the ones which are not hardcoded). Please help.

回答1:

When you're doing + action with the strings in Ruby, it doesn't convert other types to strings. If you want from Ruby to do that automatically, you need to do interpolation like:

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

If you want to use + you need to provide all variables as strings:

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

I suggest you to use first method.