ruby-on-rails – Carrierwave,Fog,Amazon S3,Rails 4
我正在尝试让Carrierwave与我的Amazon S3存储桶配合使用,但我运气不好.在我的config / initializers文件夹中,我有一个名为carrierwave.rb的文件.该文件包含以下内容:
CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS',:aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'],:aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] } config.cache_dir = "#{Rails.root}/tmp/uploads" config.fog_directory = ENV['AWS_S3_BUCKET'] config.fog_public = true config.fog_attributes = {'Cache-Control' => 'max-age=315576000'} end 我使用gem figaro作为容纳我的环境配置变量的机制.在application.yml中,我定义了ENV [‘AWS_ACCESS_KEY_ID’],ENV [‘AWS_SECRET_ACCESS_KEY’]和ENV [‘AWS_S3_BUCKET’]. 这三个变量似乎正在填充.使用FTP程序,我可以使用我在application.yml文件中定义的访问密钥和秘密访问密钥连接到我的amazon s3实例.我已经三次检查我的公钥和密钥是否正确. 尝试在我的Rails应用程序中执行上载时,收到错误消息,指出: Expected(200) <=> Actual(403 Forbidden) response => #<Excon::Response:0x007fb29a862ac8 @data={:body=>"<?xml version="1.0" encoding="UTF-8"?>n<Error>< Code>SignatureDoesNotMatch</Code> <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message> 为了解决这个问题,我还试图: >创建一个新的Amazon S3存储桶 这两个选项似乎都没有起作用.当我创建一个新的S3存储桶并在config.fog_directory中指定它时,我收到了同样的错误. 当我在carrierwave.rb文件中手动键入密钥和存储桶名称时,我仍然收到相同的错误. 我尝试在网上搜索一下答案,但大多数答案似乎是用户错误地键入了错误的访问密钥或密钥.我不相信这是这种情况,因为我已经将密钥直接复制并粘贴到亚马逊上S3管理控制台的carrierwave.rb文件中. 如果有人有任何想要我尝试的见解或事情,请随时发表评论.如果您需要更多信息,请告诉我,我会在此发布.我的应用程序是一个Rails 4应用程序,具有以下宝石: gem 'carrierwave' gem 'fog',github: 'fog/fog' gem 'mini_magick' gem 'figaro' 提前致谢! 编辑:几个补充: 我刚刚尝试创建一组新密钥,然后再次将密钥粘贴到我的carrierwave.rb文件中.我仍然收到同样的错误.我的文件现在如下所示: CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS',:aws_access_key_id => "***********",:aws_secret_access_key => "***********" } config.cache_dir = "#{Rails.root}/tmp/uploads" config.fog_directory = 'soawsthree' config.fog_public = true config.fog_attributes = {'Cache-Control' => 'max-age=315576000'} end – 来自S3 Bucket的回复.注意 – 下面列出的公共访问密钥是正确的.不确定秘密访问密钥的传入位置?: Expected(200) <=> Actual(403 Forbidden) response => #<Excon::Response:0x007fc6e3997008 @data={:body=>"<?xml version="1.0" encoding="UTF-8"?>n<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><StringToSignBytes>50 55 54 0a 0a 69 6d 61 67 65 2f 70 6e 67 0a 46 72 69 2c 20 31 31 20 4f 63 74 20 32 30 31 33 20 30 34 3a 31 30 3a 34 31 20 2b 30 30 30 30 0a 78 2d 61 6d 7a 2d 61 63 6c 3a 70 75 62 6c 69 63 2d 72 65 61 64 0a 2f 75 70 6c 6f 61 64 73 2f 70 68 6f 74 6f 2f 70 69 63 2f 33 2f 74 6f 75 63 68 2e 70 6e 67</StringToSignBytes><RequestId>22E53DA9E453D05E</RequestId><HostId>ccNccOFV+iJa3/BM9RiwAqEwmJhr1KIMvmFm0EjhrBGkN4hwMWOuRF7qH5diDYd3</HostId><SignatureProvided>hiogXz0b65S/bOSWKvca7hyXzYI=</SignatureProvided><StringToSign>PUTnnimage/pngnFri,11 Oct 2013 04:10:41 +0000nx-amz-acl:public-readn/uploads/photo/pic/3/touch.png</StringToSign><AWSAccessKeyId>AKIAIKNIDTDI2WI7RPNA</AWSAccessKeyId></Error>",:headers=>{"x-amz-request-id"=>"22E53DA9E453D05E","x-amz-id-2"=>"ccNccOFV+iJa3/BM9RiwAqEwmJhr1KIMvmFm0EjhrBGkN4hwMWOuRF7qH5diDYd3","Content-Type"=>"application/xml","Transfer-Encoding"=>"chunked","Date"=>"Fri,11 Oct 2013 04:10:34 GMT","nnCoection"=>"close","Server"=>"AmazonS3"},:status=>403,:remote_ip=>"72.21.195.65"},@body="<?xml version="1.0" encoding="UTF-8"?>n<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><StringToSignBytes>50 55 54 0a 0a 69 6d 61 67 65 2f 70 6e 67 0a 46 72 69 2c 20 31 31 20 4f 63 74 20 32 30 31 33 20 30 34 3a 31 30 3a 34 31 20 2b 30 30 30 30 0a 78 2d 61 6d 7a 2d 61 63 6c 3a 70 75 62 6c 69 63 2d 72 65 61 64 0a 2f 75 70 6c 6f 61 64 73 2f 70 68 6f 74 6f 2f 70 69 63 2f 33 2f 74 6f 75 63 68 2e 70 6e 67</StringToSignBytes><RequestId>22E53DA9E453D05E</RequestId><HostId>ccNccOFV+iJa3/BM9RiwAqEwmJhr1KIMvmFm0EjhrBGkN4hwMWOuRF7qH5diDYd3</HostId><SignatureProvided>hiogXz0b65S/bOSWKvca7hyXzYI=</SignatureProvided><StringToSign>PUTnnimage/pngnFri,@headers={"x-amz-request-id"=>"22E53DA9E453D05E",@status=403,@remote_ip="72.21.195.65"> 解决方法
似乎Fog正在使用’excon’来连接S3存储桶.我通过去除雾和excon 0.27.2解决了我的问题.我切换到了carrierwave-aws gem(使用相同的凭据,一切都按预期工作).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |