データベース構成ファイルを作成するだけのシェフのレシピを書いていますが、属性にアクセスするだけで困惑しています。私はいくつかの PHP アプリケーションを各インスタンスにデプロイしており、OpsWorks は全員に同じレシピを使用しているため、属性ファイルにはいくつかの異なる設定があります。
属性/データベース設定.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';
レシピ/データベース設定.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
私が得ているエラーはですno implicit conversion of String into Integer
。考えられるあらゆる方法で設定を作成してアクセスしようとしました...
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
ここで私が間違っていることは明らかですが、考えられることはすべて試しましたが、これを機能させる方法が見つからないようです?! 理想的には、可能な場合は変数を使用したいのですが"api"
、if/else を使用しても 3 つのアプリではそれほどひどいことにはなりません...