【问题标题】:Rails Generate controller aws error missing bucket nameRails 生成控制器 aws 错误缺少存储桶名称
【发布时间】:2018-03-02 07:50:03
【问题描述】:

我正在尝试在我的 ruby​​ on rails 项目中创建一个用户控制器,我还配置了 heroku 和 aws-s3 存储桶。我使用 S3_BUCKET、AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 设置了我的 .env 和 heroku 本地。我还将我的初始化程序/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 本地设置了该名称。还有其他地方需要设置吗?我读过的指南都没有提到这个错误。

【问题讨论】:

  • 告诉我下面的代码是否有效

标签: ruby-on-rails amazon-s3


【解决方案1】:

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

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')

【讨论】:

    【解决方案2】:

    这会对你有所帮助,我在我的项目中使用过这样的方法。 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'
    ) 
    

    就是这样,这行得通。 快乐编码:)

    【讨论】:

      猜你喜欢
      • 2020-07-16
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多