DynamoDB - Aws::DynamoDB::Errors::NotFound



在rails 5中,我通过引用 https://assist-software.net/snippets/how-save-data-amazon-dynamodb-using-ruby-on-rails 和 https://readysteadycode.com/howto-access-amazon-dynamodb-with-ruby 来使用dynamodb功能

。当我尝试加载根页面时,它会显示一个错误,例如,

Aws::DynamoDB::Errors::NotFound in Admins::SessionsController#new

在session_controller.rb

def new
login_aws
end
def login_aws
ENV['AWS_REGION'] = "us-east-1"
dynamodb = Aws::DynamoDB::Client.new(access_key_id: "xxxx", secret_access_key: "xxxxx", region: ENV['AWS_REGION'], endpoint: "http://localhost:3000")
response = dynamodb.scan(table_name: 'admin')
@admin = response.items.take(1).inject(:merge)
end

我的宝石是,

aws-sdk (2.10.19, 1.67.0)
aws-sdk-core (2.10.19)
aws-sdk-resources (2.10.19)
aws-sdk-v1 (1.67.0)

服务器日志显示错误如下,

Aws::DynamoDB::Errors::NotFound ():
app/controllers/admins/sessions_controller.rb:32:in `login_aws'
app/controllers/admins/sessions_controller.rb:6:in `new'

请帮我解决这个问题。

您的代码正在尝试连接到在"http://localhost:3000"上运行的 DynamoDB 实例:

dynamodb = Aws::DynamoDB::Client.new(
access_key_id: "xxxx", 
secret_access_key: "xxxxx", 
region: ENV['AWS_REGION'], 
endpoint: "http://localhost:3000"
)

鉴于您将AWS_REGION环境变量设置为us-east-1,看起来您的意图是连接到由 Amazon 管理的 DynamoDB 服务,删除最后一个参数以Aws::DynamoDB::Client.new

dynamodb = Aws::DynamoDB::Client.new(
access_key_id: "xxxx", 
secret_access_key: "xxxxx", 
region: ENV['AWS_REGION']
)

事实上,您的region参数是 SDK 默认使用的参数,因此您应该能够将客户端初始化块减少到:

dynamodb = Aws::DynamoDB::Client.new(
access_key_id: "xxxx", 
secret_access_key: "xxxxx"
)

来源: https://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html

您正在尝试从本地主机。然后,您需要在本地设置AWS sam,您可以在本地测试API,然后您不需要私有密钥和访问密钥。但是您使用的是从AWS CLI使用,那么您需要以这种方式使用所需的私有密钥和访问密钥 在本模块中,您需要定义区域

dynamodb = aws::D ynamoDB::Client.new( access_key_id:"xxxx", secret_access_key:"xxxxx", 区域: 环境['AWS_REGION'], 端点:"http://localhost:3000" )

最新更新