我正在编写一个简单地创建数据库配置文件的厨师食谱,但我对访问属性感到困惑。我有几个 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
我遇到的错误是没有将字符串隐式转换为整数
。我已尝试以我能想到的各种方式创建和访问设置,例如...
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 个应用程序来说不会太糟糕...
最佳答案
这是一个常见的错误,当您尝试访问一个认为它是散列但实际上是数组的对象时。事实上,从你的一个错误中,可以看出 node["api"]
是一个 Chef::Node::ImmutableArray
。
关于ruby - 厨师属性 "no implicit conversion of String into Integer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23215487/