ruby - 厨师属性 "no implicit conversion of String into Integer"

标签 ruby aws-opsworks

我正在编写一个简单地创建数据库配置文件的厨师食谱,但我对访问属性感到困惑。我有几个 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/

相关文章:

ruby - 在 proc 中设置全局

github - 如何将应用程序限制为 AWS Opsworks 中的一种类型的层?

java - 从 CLI 创建应用程序时设置 AWS IAM key

amazon-web-services - AWS Opsworks自定义层部署

ruby - 用于简单数组操作的慢速 Ruby

ruby - 一个接一个地运行 ruby​​ 方法

ruby-on-rails - Ruby on Rails : How to implement search function

ruby - 识别特定 CSV 输出中的重复项

mongodb - 如何访问VPC外的mongodb实例

amazon-web-services - 将 Grunt 或 Gulp 与 OpsWorks 结合使用