Chef attributs “pas de conversion implicite de la Chaîne en Entier”

Je suis en train d'écrire une recette chef qui crée simplement une base de données de fichier de config, mais je suis perplexe, il suffit d'accéder aux attributs. J'ai un peu de PHP des applications déployées à chaque instance, et OpsWorks utilise les mêmes recettes pour tout le monde, j'ai donc un peu différents paramètres dans les attributs de fichier.

attributs/base de données-paramètres.rb

# API
default[:api][:path]      = 'app/config/database.php';
default[:api][:host]      = 'test';
default[:api][:database]  = 'test';
default[:api][:username]  = 'test';
default[:api][:password]  = 'test';

recettes/base de données-paramètres.rb

Chef::Log.info("Database settings!");

node[:deploy].each do |application, deploy|

    if node.has_key?(application)
        Chef::Log.info("Application: #{application}");

        path = node["api"]["path"]; # ERROR HAPPENING HERE
        Chef::Log.info("Path: #{path}");

        template path do
            source "database.erb"
            mode 0440
            variables({
               :host     => node["api"]["host"],
               :database => node["api"]["database"],
               :username => node["api"]["username"],
               :password => node["api"]["password"]
            })
        end

    end

end

L'erreur que j'obtiens est no implicit conversion of String into Integer. J'ai essayé de créer et d'accéder à des réglages dans tous les sens, que je pense, comme...

node[:api][:path] # no implicit conversion of Symbol into Integer
node['api']['path'] # no implicit conversion of String into Integer
node[:api].path # undefined method `path' for #<Chef::Node::ImmutableArray:0x007fa4a71086e8>
node[application][:path] # no implicit conversion of Symbol into Integer

Je suis sûr qu'il ya quelque chose de très évident, je suis en train de faire du mal ici, mais j'ai essayé tout ce que je peux penser à un que je n'arrive pas à trouver un moyen de l'obtenir que cela fonctionne?! Idéalement, j'aimerais utiliser une variable où je peux "api", mais à l'aide d'un if/else ne serait pas trop terrible pour les 3 applications...

  • Essayez node.default[:api][:path]
  • J'obtiens les mêmes erreurs quand j'utilise node.default, par exemple: path = node.default[application][:path]; # no implicit conversion of Symbol into Integer
  • Pourrait imprimé ce node.default et node.default[application]?
  • Ok cela pourrait avoir découvert ce problème, il est peut-être pas ce que tu voulais dire, mais je n'ai node.default[application].inspect et il est retourné un tableau (["public/tmp_uploads","app/storage/archives"...]) de chemins d'accès pour une recette DIFFÉRENTE, mais tous les deux utilisé le api essentiel, ce sont les attributs non limité à la recette du même nom? Je vais essayer de changer la clé et essayer à nouveau.