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
etnode.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é leapi
essentiel, ce sont les attributs non limité à la recette du même nom? Je vais essayer de changer la clé et essayer à nouveau.
Vous devez vous connecter pour publier un commentaire.
Ok, donc le problème n'était pas vraiment que j'étais accéder à la config à tort, c'est que l'attribut différent tous les fichiers ont été fusionnées en une seule config et je n'avais pas conscience de cela.
J'ai eu ces fichiers de config...
attributs/database_settings.rb
attributs/writable_directories.rb
Quand j'ai essayé d'accéder à
default[:api][:path]
j'ai été réellement accéder au tableau des répertoires lors de la semblait pour remplacer les paramètres de base de données des attributs. Le déplacement de ces dansdefault[:directories][:api]
etdefault[:database][:api][:path]
etc corrigé cela.Commune d'erreur lorsque vous essayez d'accéder à un objet en pensant que c'est une table de hachage, mais est en fait un tableau. En fait, à partir de l'un de vos erreurs, il peut être lu que
node["api"]
est unChef::Node::ImmutableArray
.[:api][:path]
, sauf que cela ne fonctionne tout simplement pas docs.aws.amazon.com/opsworks/latest/userguide/...Notez que vous pourrez également obtenir cette erreur si vous avez accidentellement dans un espace entre le "nœud" et les éléments de l'indexation:
de travail, tout
permettra de lever cette exception. Il peut être difficile à repérer.