Rails生成控制器aws错误缺少存储桶名称

时间:2017-09-21 05:01:33

标签: ruby-on-rails amazon-s3

我正在尝试在我的ruby on rails项目中创建一个Users控制器,我还配置了heroku和一个aws-s3存储桶。我使用S3_BUCKET,AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY设置我的.env和我的heroku本地。我还将我的initializer / aws.rb文件设置为如下所示:

Aws.config.update({
  region: 'us-east-1',
  credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']),
})

S3_BUCKET = Aws::S3::Resource.new.bucket(ENV['S3_BUCKET'])

我已经安装了像这样的aws gem:

gem 'aws-sdk', '~> 3'

然而,当我运行命令

rails g controller Users new

我的终端出现以下错误:

aws-sdk-s3/bucket.rb:658:in `extract_name': missing required option :name (ArgumentError)

我查看了该文件,它正在尝试查找S3存储桶名称,但我已将其设置为.env和heroku本地。还有其他需要设置的地方吗?我读过的所有指南都没有提到这个错误。

2 个答案:

答案 0 :(得分:2)

您好,请检查您是否指定了正确的凭据和存储桶名称。另外,请确保您提供了正确的区域。请尝试以下代码

s3 = Aws::S3::Resource.new(
      credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'],  ENV['AWS_SECRET_ACCESS_KEY']),
      region: 'us-west-1'
    )

    obj = s3.bucket(ENV['S3_BUCKET']).object('key')

如果你想上传文件或其他东西

obj.upload_file(file,acl:'public-read')

答案 1 :(得分:0)

这对你有帮助,我在我的项目中使用过这样的东西。  1.在/ config / initializers文件夹中创建文件aws.rb。  2.然后复制以下代码,

S3Client = Aws::S3::Client.new(
    access_key_id: 'ACCESS_KEY_ID',
    secret_access_key: 'SECRET_ACCESS_KEY',
    region: 'REGION'
) 

多数,这都有效。 快乐的编码:)