`fetch':找不到密钥:"S3_BUCKET_NAME" (KeyError)

`fetch': key not found: "S3_BUCKET_NAME" (KeyError)

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

并喜欢在这里分享:

  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
    

对于本地: 我们在 .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

不要"quote"那些价值观

你必须更换

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'],
    }
}