【问题标题】:Chef uninitialized constant Chef::Recipe::AWSChef 未初始化常量 Chef::Recipe::AWS
【发布时间】:2015-04-14 16:34:29
【问题描述】:

我的食谱没有编译抛出错误 uninitialized constant Chef::Recipe::AWS. chef_gem aws-sdk 安装正常,但在 AWS.config( access_key_id: 'key', secret_access_key: 'pass') 被调用。

chef_gem "aws-sdk"

AWS.config(access_key_id: key, secret_access_key: pass)

rds = AWS::RDS.new

【问题讨论】:

    标签: ruby amazon-web-services chef-infra aws-sdk


    【解决方案1】:

    根据来自 aws-sdk-ruby here 的文档和代码,类名是 Aws 而不是 AWS

    但您的主要问题是您没有包含 gem 安装的库。

    在尝试调用它的类之前添加require 'aws-sdk'

    为避免被与 Chef::Recipe 命名空间的名称冲突所困扰,请将该库调用为顶级库,例如 ::Aws.config(...)

    个人研究编辑: AWS 命名空间来自 sdk v1,如果你真的想使用这个而不是 v2,你必须将你的配方更改为:

    chef_gem "aws-sdk-v1"
    
    require 'aws-sdk-v1'
    AWS.config(access_key_id: key, secret_access_key: pass)
    
    rds = AWS::RDS.new
    

    【讨论】:

    • 这是对我的食谱有用的那个。仅使用 require 'down' 不起作用。我不得不使用 chef_gem "down" require 'down' 。即使 require 加载了 gem,我也得到了“NameError 未初始化常量”。非常感谢您的回答。
    【解决方案2】:

    您需要向 aws-sdk gem 提供您的 aws 凭据。正如您在 gem 文档中所读到的:

    基本配置

    您需要提供您的 AWS 安全凭证并选择一个默认值 地区。

    AWS.config(access_key_id: '...', secret_access_key: '...', 地区: 'us-west-2')

    您也可以通过 ENV 指定这些值:

    导出 AWS_ACCESS_KEY_ID='...' 导出 AWS_SECRET_ACCESS_KEY='...' 导出 AWS_REGION='us-west-2'

    使用您的凭据编辑 'key''pass',并添加您要使用的 aws 区域。

    【讨论】:

    • access_key_id 和 secret_access_key 是设置值,我只是没有显示变量声明,因为显然我不想显示我的凭据。
    • 好的,也试试添加region
    猜你喜欢
    • 2016-03-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多