Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用heroku提供的carrierwave和fog通过rails应用程序将图像上载到AWS_Heroku_Amazon S3_Carrierwave - Fatal编程技术网

无法使用heroku提供的carrierwave和fog通过rails应用程序将图像上载到AWS

无法使用heroku提供的carrierwave和fog通过rails应用程序将图像上载到AWS,heroku,amazon-s3,carrierwave,Heroku,Amazon S3,Carrierwave,我的Heroku日志中出现以下错误:- Excon::错误::禁止(预期为(200)实际为(403禁止) 2013-10-02T16:25:51.131316+00:00应用程序[web.1]:响应=>#“\n无效访问密钥Id您提供的AWS访问密钥Id在我们的记录中不存在。5CA6A058BCE5D28AQ6grl4LPNO+F9YVTJZA7YIASYUFW4IPGGAVJEZSDAHDWSWOTIB8K+VolewYGLS3密钥”,:headers=>{“x-amz-request-Id”=

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

Excon::错误::禁止(预期为(200)实际为(403禁止) 2013-10-02T16:25:51.131316+00:00应用程序[web.1]:响应=>#“\n无效访问密钥Id您提供的AWS访问密钥Id在我们的记录中不存在。5CA6A058BCE5D28AQ6grl4LPNO+F9YVTJZA7YIASYUFW4IPGGAVJEZSDAHDWSWOTIB8K+VolewYGLS3密钥”,:headers=>{“x-amz-request-Id”=>“5CA6A058BCE5CA6528A”,“x-amz-Id-2”=>“Q6grl4LPNO+F9YVtJZA7YIASYUFw4IpggAVlMJEzsdAhdwSWOTIB8K+VolEwyGYL”、“内容类型”=>“应用程序/xml”、“传输编码”=>“分块”、“日期”=>“周三,2013年10月2日16:25:50 GMT”、“连接”=>“关闭”、“服务器”=>“亚马逊3”}、:状态=>403、:远程ip=>“176.32.100.200”、@body=”\nInvalidAccessKeyId您提供的AWS访问密钥Id在我们的记录中不存在。5CA6A058BCE5D28AQ6grl4LPNO+F9YVTJZA7YIASYUFW4IPGGAVJEZSDAHDWSWOTIB8K+VolEwyGYL 我已经检查了AWS密钥至少十几次了。 我使用以下方法设置了Heroku变量:

heroku config:add S3_KEY=XXXXXXXXXXXXXXX S3_SECRET=XXXXXXXXXXXXXXXXXXXXXX

但我得到的错误如上所述。

看起来您的AWS访问密钥无效。有几件事需要仔细检查:

  • 您的访问密钥、密钥和存储桶是否都与AWS仪表板中的匹配

  • 您是否在carrierwave初始值设定项中正确设置了这些变量?您应该能够通过从heroku run rails控制台运行以下命令进行检查:
    carrierwave.configure{| config | put config.fog_凭据;put config.fog_目录}

如果您反复检查这些,并且确实没有任何错误,那么您的S3帐户可能有一个奇怪的问题(您是否可以使用另一个使用相同凭据的S3实用程序访问您的S3帐户?),或者您的代码中发生了一些不正常的事情


祝你好运!

我利用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

然后在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的建议。

我可以使用相同的密钥和凭据从本地主机上载图像,但一旦我将代码推送到Heroku并尝试通过Heroku应用程序上载图片,我就会遇到这个问题。Taavo,当我运行命令时,我得到以下输出:{:provider=>“AWS”,:AWS\u access\u key\u id=>“S3\u key”,:aws_secret_access_key=>“S3_secret”}S3_BUCKET_NAME=>nilAnd根据S3_KEY、S3_SECRET和S3_BUCKET_NAME,您不是指文字字符串,对吧?输出包括您实际正确的凭证,您编辑了它们?我准确地复制并粘贴了文字字符串。这是因为我在本地计算机中在config/environment/ap文件中设置了这些变量吗p_environment_variables.rb?我这样做的原因是为了防止向Github添加aws凭据。对于Heroku,我确实使用Heroku配置设置了参数:add S3_KEY=XXXX S3_SECRET=XXXXX Heroku配置:set S3_BUCKET=BUCKET_name是的,听起来像是在应用程序中的某个地方覆盖了环境变量或carrierwave配置iguration。如果您只是搜索找到的字符串,应该不难确定。
| |=
操作符是您的朋友。或者,如果您不想自己处理此问题,可以使用,确保将其限制在开发和测试组。
$ 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