0

我将 Ruby 开发工具包aws-sdk-dynamodb与 Ruby 2.5 一起用于将项目保存到 AWS DynamoDB 表的 AWS Lambda 函数。

我可以使用以下代码成功保存项目:

    def save!
      hash = {
        table_name: ‘my-table’,
        item: {
          message_sid: '123456',
          created_at: Time.now.to_s
        }
      }
      dynamo = Aws::DynamoDB::Client.new(region: ‘us-east-1’)
      dynamo.put_item(hash)
      puts 'item successfully saved'
      true
    rescue => error
      puts "Unable to save item: #{error}: #{error.message}"
      false
    end

当我使用此代码时,我收到一个错误“没有这样的成员:message_sid”:

    def save!
      dynamoDB = Aws::DynamoDB::Resource.new(region: ‘us-east-1’)
      table = dynamoDB.table(‘my-table’)
      hash = { message_sid: '123456', created_at: Time.now.to_s }
      table.put_item(hash)
      puts 'item successfully saved'
      true
    rescue => error
      puts "Unable to save item: #{error}: #{error.message}"
      false
    end

我没有找到任何有关“没有这样的成员”错误的 DynamoDB 文档。为什么第二个例子失败了?

4

1 回答 1

1

诚然,错误消息不是很有帮助,但仔细阅读示例文档会发现 DynamoDB在对表对象调用item:该方法时需要密钥。put_item所以这段代码可以工作:

    def save!
      dynamoDB = Aws::DynamoDB::Resource.new(region: ‘us-east-1’)
      table = dynamoDB.table(‘my-table’)
      hash = { message_sid: '123456', created_at: Time.now.to_s }
      table.put_item(item: hash)
      puts 'item successfully saved'
      true
    rescue => error
      puts "Unable to save item: #{error}: #{error.message}"
      false
    end

具体来说,您应该使用table.put_item(item: hash)not table.put_item(hash)

于 2019-04-12T06:51:19.560 回答