我正在编写一个厨师食谱,它只是创建一个数据库配置文件,但我很难访问这些属性。我为每个实例部署了一些 PHP 应用程序,并且 OpsWorks 对每个人都使用相同的配方,因此我在属性文件中有一些不同的设置。
属性/数据库-settings.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';
食谱/数据库-settings.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"
,但是对于 3 个应用程序来说,使用 if/else 不会太糟糕......