`fetch':未找到密钥:“S3_BUCKET_NAME”(KeyError)

时间:2016-11-02 14:49:04

标签: ruby-on-rails heroku amazon-s3 paperclip spree

我正在使用Spree 3.1。要使用Heroku,我需要AWS S3 tp存储图片。 花了这么多时间使用KeyError本地和Heroku。

2 个答案:

答案 0 :(得分:2)

喜欢在这里分享:

  1. 在AWS S3文档中为ID和access_key_id以及secret_access_key创建IAM USER。为了使其工作,我需要创建个人资料并设置管理员权限。

  2. 只在需要的环境中粘贴它,例如:config / environments / production.rb和development.rb

     config.paperclip_defaults = {
       storage: :s3,
       s3_credentials: {
       bucket: ENV.fetch('S3_BUCKET_NAME'),
       access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
       secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
       s3_region: ENV.fetch('AWS_REGION'),
       }
      }
    

    请勿替换该值。代替 对于Heroku:

    heroku config:set S3_BUCKET_NAME=your-bucket-name AWS_ACCESS_KEY_ID=your-access-key-id AWS_SECRET_ACCESS_KEY=your-secret-access-key AWS_REGION=your-region
    
  3. 对于本地人: 我们在.env中添加值

        $ cat .env
         S3_BUCKET_NAME=your-bucket-name-development
         AWS_ACCESS_KEY_ID=your-access-key-id
         AWS_SECRET_ACCESS_KEY=your-secret-access-key
    

    不要“引用”这些值

答案 1 :(得分:0)

您必须替换

config.paperclip_defaults = {
    storage: :s3,
    s3_credentials: {
        bucket: ENV.fetch('S3_BUCKET_NAME'),
        access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
        secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
        s3_region: ENV.fetch('AWS_REGION'),
    }
}

作者

config.paperclip_defaults = {
    storage: :s3,
        s3_credentials: {
        bucket: ENV['S3_BUCKET_NAME'],
        access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'],
        secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'],
        s3_region: ENV.fetch'AWS_REGION'],
    }
}