【问题标题】:Unable to upload images to AWS through a rails App using carrierwave and fog by heroku无法使用heroku的carrierwave和fog通过rails应用程序将图像上传到AWS
【发布时间】:2013-10-09 03:28:16
【问题描述】:

我的 Heroku 日志出现以下错误:-

Excon::Errors::Forbidden (预期 (200) 实际 (403 Forbidden) 2013-10-02T16:25:51.131316+00:00 app[web.1]: response => #"\nInvalidAccessKeyId您提供的 AWS 访问密钥 ID 在我们的记录中不存在。5CA6A058BCE5D28AQ6grl4LPNO+F9YVtJZA7YIASYUFw4IpggAVlMJEzsdwyGLSSW3KEzsdWyGLSSW3 , :headers=>{"x-amz-request-id"=>"5CA6A058BCE5D28A", "x-amz-id-2"=>"Q6grl4LPNO+F9YVtJZA7YIASYUFw4IpggAVlMJEzsdAhdwSWOTIB8K+VolEwyGYL", "Content-Type"=>"应用程序/ xml", "Transfer-Encoding"=>"chunked", "Date"=>"Wed, 02 Oct 2013 16:25:50 GMT", "Connection"=>"close", "Server"=>"AmazonS3" }, :status=>403, :remote_ip=>"176.32.100.200"}, @body="\nInvalidAccessKeyId我们的记录中不存在您提供的 AWS 访问密钥 ID。5CA6A058BCE5D28AQ6grl4LPNO+F9YVtJZA7YIASYUFw4IpggAVlMJEzsdAhdWVolLEOIBy8

我已经检查了 AWS 密钥至少十几次。 我使用以下方法设置了 Heroku 变量:

heroku config:add S3_KEY=XXXXXXXXXXXXXXX S3_SECRET=XXXXXXXXXXXXXXXXXXXXXX

但我得到了上述错误。

【问题讨论】:

    标签: heroku amazon-s3 carrierwave


    【解决方案1】:

    我能够使用 Taavo 的建议弄清楚。我使用了 figaro gem,我确实将 AWS 凭证放入了 config/application.yml。

    此外,我还更改了我的carrierwave.rb 文件:

    CarrierWave.configure do |config|
    
      config.fog_credentials = {
        provider: "AWS",
        aws_access_key_id: "S3_KEY",
        aws_secret_access_key: "S3_SECRET",
    
      }
      config.cache_dir = "#{Rails.root}/tmp/uploads" 
      config.fog_directory = "S3_BUCKET_NAME"
      config.fog_public = false
      config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}
    end
    

    CarrierWave.configure do |config|
    
      config.fog_credentials = {
        provider: "AWS",
        aws_access_key_id: ENV["S3_KEY"],
        aws_secret_access_key: ENV["S3_SECRET"],
        #region: 'Northern California'
    
      }
      config.cache_dir = "#{Rails.root}/tmp/uploads" 
      config.fog_directory = ENV["S3_BUCKET_NAME"]
      config.fog_public = false
      config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}
    end
    

    然后将以下内容添加到 Heroku:

    $ heroku config:set S3_BUCKET_NAME=your_bucket_name
    $ heroku config:set S3_KEY=your_access_key_id
    $ heroku config:set S3_SECRET=your_secret_access_key
    

    那成功了。感谢 Taavo 的建议。

    【讨论】:

      【解决方案2】:

      您的 AWS 访问密钥似乎无效。需要仔细检查的几件事:

      • 您的访问密钥、秘密密钥和存储桶是否都与 AWS 控制面板中的内容匹配?

      • 您是否在载波初始化程序中正确设置了这些变量?您应该能够通过从heroku run rails console 运行以下命令来检查:CarrierWave.configure { |config| puts config.fog_credentials; puts config.fog_directory }

      如果您对这些内容进行了两次和三次检查并且确实没有任何问题,那么您的 S3 帐户可能有一个奇怪的问题(您可以使用相同的凭据通过另一个 S3 实用程序访问您的 S3 帐户吗?),或者有你的代码中发生了一些疯狂的事情。

      祝你好运!

      【讨论】:

      • 我可以使用相同的密钥和凭据从本地主机上传图片,但是一旦我将代码推送到 Heroku 并尝试通过 heroku 应用上传图片,我就会遇到这个问题。
      • Taavo,当我运行命令时,我得到以下输出:{:provider=>"AWS", :aws_access_key_id=>"S3_KEY", :aws_secret_access_key=>"S3_SECRET"} S3_BUCKET_NAME => nil
      • S3_KEY、S3_SECRET 和 S3_BUCKET_NAME,你不是指文字字符串,对吧?输出包含您实际正确的凭据,并且您将它们编辑掉了?
      • 我已经完全复制并粘贴了文字字符串。是不是因为在我的本地机器上我在文件 config/environment/app_environment_variables.rb 中设置了这些变量?我这样做的原因是为了防止将 aws 凭证添加到 Github。对于 Heroku,我确实使用 heroku config:add S3_KEY=XXXX S3_SECRET=XXXXX heroku config:set S3_BUCKET=bucket_name 设置了参数
      • 是的,听起来像是在您的应用程序中的某个地方,您正在覆盖环境变量或载波配置。如果您只是搜索找到的字符串,应该不难弄清楚。 ||= 运算符是您的朋友。或者,如果您不想自己处理这个问题,可以使用dotenv-rails,确保将其限制在开发和测试组中。
      猜你喜欢
      • 2012-07-08
      • 1970-01-01
      • 2018-06-13
      • 2013-08-25
      • 2013-06-27
      • 2016-06-29
      • 1970-01-01
      • 2014-07-17
      • 2015-12-31
      相关资源
      最近更新 更多